@Quickaxe-Martina

Как в annotate сделать второй запрос?

Добрый день, появилась необходимость добавить поле на вывод get запроса

def annotate_poll_name(self, obj):
        steps = Step.objects.filter(block=obj).annotate(
            poll_text=Poll.objects.get(id=447).text
        )
        return StepSerializer(steps, many=True).data

id пока что указан руками просто для тестов, в дальнейшем там должно передаваться поле Step.object_id, проблема в том что даже в таком варианте все валится и я не могу понять почему, помогите пожалуйста TypeError: QuerySet.annotate() received non-expression(s):
class Step(models.Model):

    STEP_TYPE = (
        ('poll', 'Опрос'),
        ('questions', 'Вопросы'),
        ('file', 'Файл')
    )
    type = models.CharField(
        max_length=60,
        choices=STEP_TYPE
    )
    object_id = models.IntegerField(null=True)
    block = models.ForeignKey(Block, on_delete=models.CASCADE, related_name='steps')
    sort_order = models.PositiveIntegerField(default=1,  validators=[MinValueValidator(1)])
  • Вопрос задан
  • 564 просмотра
Пригласить эксперта
Ответы на вопрос 1
@noremorse_ru
Ебушки - воробушки. Вместо object_id сделай поле poll = models.ForeignKey(Poll, ***), теперь ты можешь обращаться к связанному объекту как угодно, можешь сделать property и оно автоматически попадет в сериалайзер, если это подкласс ModelSerializer (но это не точно, надо проверить)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы