Нет подходящего запроса Django Model

Я хочу добавить к количеству_очков (из модели Answer) оценку (из модели Vote), поэтому каждый раз, когда я сохраняю или добавляю новый голос, я хочу, чтобы он добавлял либо +1, либо +(-1). Но я получаю эту странную ошибку, говорящую, что нет подходящего запроса. Ответ должен существовать, чтобы голосование даже создало экземпляр.

class Vote(models.Model):
    class AnswerScore(models.IntegerChoices):
        add = 1
        subtract = -1

    score = models.IntegerField(choices=AnswerScore.choices)
    answer = models.ForeignKey('Answer', on_delete=models.PROTECT)
    user = models.ForeignKey('users.CustomUser', on_delete=models.PROTECT)

    class Meta:
        unique_together = ('answer', 'user',)

class Answer(models.Model):
    answer = models.TextField()
    created_at = models.DateTimeField(editable=False, default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    user = models.ForeignKey('users.CustomUser', on_delete=models.PROTECT)
    question = models.ForeignKey('Question', on_delete=models.PROTECT)
    number_of_points = models.IntegerField(default=0)
    moderate_status = models.BooleanField(default=False)
    
    @receiver(post_save, sender=Vote)
    def change_points(sender, created, instance, **kwargs):
        if created:
            answer = Answer.objects.get(answer=sender.answer)
            answer.number_of_points = F('number_of_points') + sender.score

Traceback:

Вы используете атрибут "sender", и я не думаю, что это то, что вам нужно. https://docs.djangoproject.com/en/4.0/ref/signals/#django.db.models.signals.post_save

Если вы хотите получить доступ к текущему экземпляру Vote, вам следует использовать instance вместо этого. Таким образом, что-то вроде

@receiver(post_save, sender=Vote)
def change_points(sender, created, instance, **kwargs):
    if created:
       answer = Answer.objects.get(answer=instance.answer) # or instance.answer
       answer.number_of_points += instance.score
       answer.save()
Вернуться на верх