сделать запись пулей - PullRequest
0 голосов
/ 28 мая 2020

У меня есть модель, у которой есть ярлык, но при попытке регистрации он не позволяет это сделать, генерируя следующую ошибку: not null constraint failed: commentaries_commentar ie .post_id.

это модель:

class Commentarie(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    commentarie = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

это URL-адреса:

urlpatterns = [
    path('<slug:slug>/', views.CommentarieCreateView.as_view(), name='add_commentarie'),
]

это представление:

class CommentarieCreateView(CreateView):
    template_name = 'commentaries/commentarie.html'
    model = Commentarie
    form_class = CommentarieForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return redirect('posts:post')

также попробуйте создать отношение, получая напрямую от kwarg, но он генерирует ошибка, потому что оказывается, что он ожидает объект pk, и его slug сгенерирован правильно

1 Ответ

1 голос
/ 28 мая 2020

Ваше свойство post в Commentarie не может быть null в базе данных. Вам нужно либо указать значение, либо разрешить ему быть null.

Чтобы установить объект сообщения, вы можете сделать что-то вроде этого ...

class CommentarieCreateView(CreateView):
    template_name = 'commentaries/commentarie.html'
    model = Commentarie
    form_class = CommentarieForm

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.post = # A Post object
        self.object.save()
        return redirect('posts:post')

Чтобы разрешить ему быть null измените его на ...

class Commentarie(models.Model):
    ...
    post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True, blank=True)
    ...

После того, как вы измените его, вам нужно будет снова запустить миграцию базы данных.

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