我正在使用Django Rest Framework构建API,我有两个共享多对多关系的模型。模型是联系人和任务。可以与多个联系人共享任务,联系人可以与其共享许多任务。我也使用手动连接表,而不是Django内置的多对多关系。
在API中,我想让检索任务的方法包括与其共享任务的联系人列表。我目前有办法实现这一目标,但它并不好。序列化的任务有一个属性shared_with
,它是一个通过SharedWithSerializer
类的相关字段(这是关系的这一方面的ContactTaskJoin序列化程序的版本)。所以输出很笨重。 SharedWithSerializer
只有一个属性 - contact
- 引用ContactSerializer
类。 API返回的示例任务:
{
'id': 100,
'shared_with': [
{
'contact': {
'id': 1,
'name': 'Alice'
}
},
{
'contact': {
'id': 2,
'name': 'Bob'
}
}
]
}
我想要的是只提供与之共享任务的联系人的简单列表。类似的东西:
{
'id': 100,
'shared_with': [
{
'id': 1,
'name': 'Alice'
},
{
'id': 2,
'name': 'Bob'
},
]
}
我们非常感谢任何建议。
答案 0 :(得分:2)
您可以覆盖to_representation
上的SharedWithSerializer
以将联系人字段展平一级
例如
class SharedWithSerializer(serializers.ModelSerializer):
def to_representation(self, obj):
representation = super().to_representation(obj)
shared_with = representation.pop('shared_with')
representation['shared_with'] = [entry['contact'] for entry in shared_with]
return representation
我希望这有助于解决您的问题。如果您还可以发布models.py和serializers.py,我可以根据需要提供更加量身定制的答案。