首页 > 解决方案 > Django注释字段未传递给序列化程序

问题描述

我对为什么这不起作用感到有点沮丧。

楷模:

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'

但是,在 shell 窗口中使用相同的查询成功地检索了 field1 的值

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

成功打印 field1 值

标签: djangodjango-modelsdjango-rest-framework

解决方案


更改 get_field1() 方法

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


推荐阅读