Отладка проекта Python Django - PullRequest
0 голосов
/ 01 июля 2019

Я разработчик Python и слежу за одним примером проекта Python django.

Теперь я сталкиваюсь с ошибкой, но все еще не могу найти решение:

"IntegrityError at /blog/1/comments/new/
NOT NULL constraint failed: blog_comment.author_id"

Я надеюсь, что полезный совет поэта проблема, спасибо ...

"models.py":

class Comment(models.Model):
        post = models.ForeignKey(Post, on_delete=models.PROTECT)  #20190613 added some code by jpanda 'on_delete'
        author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, db_constraint= False)
        message = models.TextField()

        def get_absolute_url(self):

                return reverse('blog:post_detail', args=[self.post_id])

"views.py":

class CommentCreateView(CreateView):
    model = Comment
    form_class = CommentForm

def form_valid(self, form):
        comment = form.save(commit=False)
        comment.post = get_object_or_404(Post, pk = self.kwargs['post_pk'])
        comment.author = self.request.user
        comment.save()
        return super(CommentCreateView, self).form_valid(form)

  comment_new = CommentCreateView.as_view()

После добавления компонентов в форме комментариев, я должен добавить комментарии в панель сообщений, но есть ошибка, как указано выше: я точно не знаю причину:

1 Ответ

0 голосов
/ 01 июля 2019

Хотя в вашем вопросе много неясного.Но я предполагаю, что эта ошибка происходит, когда вы запускаете команду ./manage.py makemigrations.Ошибка в том, что база данных требует, чтобы у вас было значение поля author для всех строк.Это потому, что параметр null в models.ForeignKey() по умолчанию равен False.Это означает, что он не допускает null значений.

Теперь очевидно, что вы не вводите никакие значения или данные для полей с помощью команды makemigrations.Но это может произойти, если вы попытаетесь добавить дополнительные поля в уже перенесенную модель (или таблицу), которая содержит некоторые записи.Поэтому, когда вы добавляете это дополнительное поле, которое в вашем случае может быть author, оно обновляет таблицу с этой дополнительной записью.Но более ранние строки не имеют никакого значения для этого поля.Это означает, что они будут null.Но поскольку значение по умолчанию null=False, вы получите эту ошибку.

Если вы разрешите author ForeignKey как null=True, это решит проблему.Это означает, что уже существующие записи могут иметь значения null.

author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.DO_NOTHING, db_constraint= False)

Другое решение :

Если вы просто делаете пример проекта и данные в вашей базе данных не так важны для вас.Вы также можете удалить уже существующие таблицы или очистить всю базу данных.Проверьте эту ссылку для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...