@happiva

Как исправить “NOT NULL constraint failed”?

Как я могу создать объект в Django с двумя полями OneToOne (пользователь, статья), я понимаю, как заполнить пользовательское поле (self.request.user), но поле статьи, в который должен содержать «slug» объекта (статья), на которой мы находимся, я не понимаю

Очень рассчитываю на вашу поддержку , я еще совсем новичок .
Заранее спасибо
class CreateVote(CreateView):
    model = Vote
    template_name = 'art_detail.html'
    fields = ()

    def form_valid(self, form):
        form.author_id = self.request.user
        form.art_ident = self.kwargs['slug']# проблема вот тут ,как исправить ее , я не знаю 
        return super(CreateVote, self).form_valid(form)

    def get_success_url(self):
        return reverse('art_detail')


Модель Vote
class Vote(models.Model):
    author_id = models.ForeignKey(
        MyUser,
        on_delete=models.CASCADE
    )
    art_ident = models.OneToOneField(
        Art,
        on_delete=models.CASCADE,
    )
    data_vote = models.DateTimeField(
        auto_now=True
    )
    objects = VoteManager()

    class Meta:
        unique_together = ('art_ident', 'author_id')
  • Вопрос задан
  • 1730 просмотров
Решения вопроса 1
deepblack
@deepblack Куратор тега Django
Для реализации лайков (Голосов) отлично подходит GenericForeignKey - позволяет ссылаться на различные объекты и вообще данное решение более универсальное.
class Like(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             related_name='likes',
                             on_delete=models.CASCADE)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')


Я рекомендую посмотреть как устроена система лайков тут (* может быть заблокирован на территории России)

UPD:
Если ссылка выше не работает (и нет VPN), вариант заглянуть на GitHub
Тут исходники приложения из ссылки выше.
Возможно без обьяснения будет не очень понятно что здесь реализовано и почему именно так,
но проект хорош как образец.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы