LINUX.ORG.RU

Django запрос в annotate

 ,


0

1

Добрый день, появилась необходимость добавить поле на вывод 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):


Ответ на: комментарий от gruy

447 это я просто для примера взял, потому что у меня валилось по хорошему там должен передаваться object_id который в Step хранится

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)])

diosio
() автор топика
Ответ на: комментарий от gruy
    def annotate_poll_name(self, obj):
        steps = Step.objects.filter(block=obj).annotate(
            poll_text=Value(Poll.objects.get(id=447).text, output_field=CharField())
        )
        return StepSerializer(steps, many=True).data

не подскажешь как тянуть вместо 447 object_id?

diosio
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.