Django.db.utils.IntegrityError: Сбой ограничения NOT NULL: user.id

Я не знаю, почему возникает ошибка, хотя я указал автора. Буду признателен за помощь.

model & form

class SuperTitle(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='debate_author')
    super_title = models.CharField(max_length=100)
    liker = models.ManyToManyField(User, related_name='debate_liker')

    def __str__(self):
        return self.super_title


class SuptitForm(forms.ModelForm):
    class Meta:
        model = SuperTitle
        fields = ['super_title']

views.py

def create(request):
...
  dic = {'super_title' : request.POST.get('sup_title')}
  sup_form = SuptitForm(dic)
  if sup_form.is_valid():
    sup_form.author = request.user
    sup_form.super_title = ...
    sup_form.save()
...

enter image description here

return IntegrityError at /polls/debate/create/ Сбой ограничения NOT NULL: polls_supertitle.author_id

Вы получаете эту ошибку, потому что хотите сохранить форму (создать новый объект SuperTitle в базе данных) без автора. Вам нужно каким-то образом передать в форму объект author или id. Если request.user является автором, я рекомендую форму:

class SuptitForm(forms.ModelForm):
    class Meta:
        model = SuperTitle
        fields = ['super_title', 'author']
        widgets = {'author': forms.HiddenInput()}

и в поле зрения:

    def create(request):
      if request.method == 'POST':
        sup_form = SuptitForm(request.POST)
        if sup_form.is_valid():
          sup_form.save()
      else:
        sup_form = SuptitForm(initial={'author': request.user}
...

Возможно, у вас нет аутентифицированного пользователя, поэтому request.user возвращает None.

Используйте декоратор login_required, чтобы только аутентифицированный пользователь мог получить доступ к этой функции.


from django.contrib.auth.decorators import login_required

@login_required
def create(request):
   ........
Вернуться на верх