NOT NULL constraint failed: forum_question.user_id (django)
Я пытаюсь сохранить объект с помощью cbv, я новичок в его использовании, и я пытаюсь сохранить объект с помощью create view, но получаю эту ошибку:
"NOT NULL constraint failed: forum_question.user_id"
Я был бы признателен за дружественное для начинающих объяснение того, как это исправить и, возможно, советы, спасибо!
models.py:
class Question(VoteModel, models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
detail = models.TextField()
tags = models.TextField(default='')
add_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
forms.py:
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = ['title', 'detail', 'tags']
views.py:
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()
Экземпляр вопроса форума должен иметь не нулевое поле пользователя, но вы не указываете пользователя, связанного с создаваемым объектом. В случае, если вы не хотите добавлять пользователя, обновите поле user вашей модели, чтобы оно было:
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
или в вашей форме ask вы перегружаете form_valid(), чтобы добавить пользователя, примерно так (обратите внимание, я не тестировал это напрямую, следуйте документации здесь):
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()
def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)
Я не уверен, что это все еще полезно, однако я столкнулся с той же ошибкой. Вы можете исправить ошибку, удалив файлы миграции и базу данных. Ошибка возникает из-за отправки данных NULL (нет данных) в уже существующее поле в базе данных, обычно после того, как это поле было изменено или удалено.