添加与JSON响应的多对多关系的所有id-s的列表

时间:2015-01-17 21:10:42

标签: python json django django-rest-framework django-orm

我想将多对多关系的所有 id -s添加到我的序列化JSON响应中。

class TestField(serializers.Field):
   def to_native(self, value):
       list = []
       for boss in value.all():
           list.append(value).append(';')
       return list

class EmployeeSerializer(serializers.HyperlinkedModelSerializer):
   test = TestField('test')

   class Meta:
       model = Employee
       fields = ('id', 'test', 'bosses')
       depth = 1

所以我想要实现的目标是:我希望在响应中包含 bosses 的所有 Employee ,以及其他 id -s的附加列表,以 ; 分隔。

我已尝试使用我创建的自定义文件,但由于某种原因,我不断收到以下错误。

  

/ employees /

中的AttributeError      

' Employee'对象没有属性' test'

此错误的含义是什么?如何修复我的代码以列出 id -s?

1 个答案:

答案 0 :(得分:1)

Django REST框架provides a PrimaryKeyRelatedField,它允许您将关系序列化为主键列表,这听起来与您正在寻找的完全一样。

class EmployeeSerializer(serializers.HyperlinkedModelSerializer):
    test = serializers.PrimaryKeyRelatedField(
        read_only=True,
        many=True,
        source='relation'
    )

    class Meta:
        model = Employee
        fields = ('id', 'test', 'bosses')
        depth = 1

这会将主键列表序列化为test。主键与employee.relation.all()返回的对象的主键相同(因为the source is set to "relation")。