У меня возникла проблема с автоматическим назначением автора. Раньше он работал, но перестал работать после того, как я добавил несколько встроенных наборов форм.
Вот моя модель: >
class Recipe(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
serving = models.PositiveIntegerField(default=1)
temperature = models.PositiveIntegerField(default=1)
prep_time = models.PositiveIntegerField(default=1)
cook_time = models.PositiveIntegerField(default=1)
##tags = models.ManyToManyField('Tag')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse('recipes-detail', kwargs={"pk": self.pk})
def __str__(self):
return self.title
Не уверены, может быть, какой-то другой мой код может переопределить это?
Это моя форма:
class RecipeForm(forms.ModelForm):
class Meta:
model = Recipe
exclude = ['author', 'created_at', 'updated_at']
def __init__(self, *args, **kwargs):
super(RecipeForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = True
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-md-3 create-label'
self.helper.field_class = 'col-md-9'
self.helper.layout = Layout(
Div(
Field('title'),
Field('description'),
Field('temperature'),
Field('serving'),
Field('prep_time'),
Field('cook_time'),
)
)
Если я установлю в модели пустое значение=True, null=True, это позволит форме пройти, но без указания автора –
Даже любое указание на то, что может быть причиной моей проблемы, было бы чрезвычайно полезно!
Большое спасибо
Изменить — удалить:
exclude = ['author', 'created_at', 'updated_at']
выдает ошибку:
IntegrityError at /recipe/create/
NOT NULL constraint failed: recipes_recipe.author_id
Request Method: POST
Request URL:
Django Version: 5.0.7
Exception Type: IntegrityError
Exception Value:
NOT NULL constraint failed: recipes_recipe.author_id
Подробнее здесь: https://stackoverflow.com/questions/787 ... g-the-post