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

Add a list of all id-s of a many to many relationship to the JSON response

我想将多对多关系的所有 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

所以我想要实现的是:我想要拥有 Employee[=35 的所有 bosses =] 在响应中,以及他们所有 id-s 的附加列表,由 ; 分隔.

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

AttributeError at /employees/

'Employee' object has no attribute 'test'

这个错误是什么意思,我该如何修复我的代码以提供 id-s 的列表?

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")。