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()
...
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):
........