У меня есть CreateView, работающий с ModelForm, который подклассов моделирует Item.Item.author = ForeignKey (User, on_delete = models.CASCADE,)
В CreateView пользователь заполняет большую часть формы, но я хочу, чтобы Item.author был установлен для request.user.Всякий раз, когда я делаю это, используя form_valid () для установки form.instance.author = self.request.user, я получаю сообщение об ошибке, говоря, что «нулевое значение в столбце« author_id »нарушает ненулевое ограничение»
Я попытался удалить «автора» как поле для редактирования из form.py.
Это то, что я пытаюсь повторить: https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-editing/#models-and-request-user
Model.py
class Item(models.Model):
# SOME OTHER FIELDS WHICH RENDER AND SAVE FINE
author = models.ForeignKey(User,
on_delete=models.CASCADE,
def get_absolute_url(self):
return reverse('item_detail',args=[str(self.id)])
)
forms.py
class SubmitItemForm(forms.ModelForm):
class Meta():
model = Item
fields = ('link','title','excerpt','type','author')
def __init__(self, *args, **kwargs):
super(SubmitItemForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_id = 'submit_item'
self.helper.form_class = 'submit'
self.helper.form_method = 'post'
self.helper.form_action = 'item_detail'
self.helper.add_input(Submit('submit', 'Submit'))
views.py
class SubmitItem(LoginRequiredMixin, generic.CreateView):
login_url = '/login/'
redirect_field_name = 'item_detail.html'
form_class = SubmitItemForm
model = Item
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def form_invalid(self, form):
response = super().form_invalid(form)
return response
Я ожидаю сохранения формы в базе данных и перенаправления браузера на сохраненные данные с помощьюМетод get_absolute_url (), описанный в модели Item.