Нет подходящего запроса 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()