如何解决Rest Framework - Many 2 Many 关系,包括通过 API 中的模型字段
我有 2 个模型通过 M2M 模型连接:
class Person(models.Model):
name = models.CharField(max_length=30)
class Group(models.Model):
name = models.CharField(max_length=100)
members = models.ManyToManyField(Person,through='GroupPerson',related_name='groups')
class GroupPerson(models.Model):
group = models.ForeignKey(Group,on_delete=models.CASCADE)
person = models.ForeignKey(Person,on_delete=models.CASCADE)
rank = models.CharField(max_length=100',default='New')
和序列化器
class GroupPersonSerializer(serializers.ModelSerializer):
class Meta:
model = GroupPerson
fields = '__all__'
class GroupSerializer(serializers.ModelSerializer):
members = serializers.PrimaryKeyRelatedField(many=True,queryset=Person.objects.all())
class Meta:
model = Group
fields = '__all__'
class PersonSerializer(serializers.ModelSerializer):
groups = serializers.PrimaryKeyRelatedField(many=True,queryset=Group.objects.all())
class Meta:
model = Person
fields = '__all__'
和 API 去获取一组返回
[
{
"name": "...","members": [ 1,... ]
}
]
我如何获得类似以下的回复:
[
{
"name": "...","members": [
{
"group_id": 1,"person_id": 1,"rank": "New"
},...
]
}
]
即,我想对 through 关系的所有字段进行 GET/POST/PATCH
解决方法
代替使用
groups = serializers.PrimaryKeyRelatedField(many=True,queryset=Group.objects.all())
做
groups = GroupSerializer(many=True,read_only=True)
这将允许 DRF 将 groups
序列化为嵌套对象列表。如需了解详情,请查看 the documentation for Nested Relationships
试试:
class PersonSerializer(serializers.ModelSerializer):
groups = serializers.SerializerMethodField()
def get_groups(self,person):
queryset = GroupPerson.objects.filter(person=person)
return GroupPersonSerializer(queryset,many=True).data
class Meta:
model = Person
fields = ["id","name","groups"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。