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 (нет данных) в уже существующее поле в базе данных, обычно после того, как это поле было изменено или удалено.

Вернуться на верх