Django поле аннотации не передано в сериализатор - PullRequest
0 голосов
/ 24 февраля 2020

Я немного расстроен тем, почему это не работает.

Модели:

class User(models.Model):
    ...
class Group(models.Model):
    ...
class Member(models.Model):
    user = models.ForeignKey(User, related_name='groups')
    group = models.ForeignKey(Group, related_name='members')
    field1 = models.IntergerField()

Просмотр:

def get_queryset(self):
    return Group.objects.filter(members__user=self.request.user).annotate(field1=F('members__field1'))

Сериализатор:

field1 = serializers.SerializerMethodField()
def get_field1(self, obj):
    return obj.field1
class Meta:
    model = models.Group
    fields = ('field1', ...)

Получение ошибки объект не имеет атрибута 'field1'

Однако при использовании того же запроса в окне оболочки успешно извлекается значение для field1

g = Group.objects.filter(members__user=self.request.user).annotate(field1=F('members__field1'))
print(g[0].field1)

Успешно печатает значение field1

1 Ответ

0 голосов
/ 24 февраля 2020

изменить метод get_field1 ()

def get_field1(self, obj):
    return obj.members.field1

...