首页 > 解决方案 > Django Rest Framework:处理多对多关系

问题描述

要求是“我想插入具有人员组选择的人员,并且在创建人员组时我可以为该特定组选择人员”。

我在我的models.py中添加了两个模型并管理它们之间的多对多关系。

模型.py

from django.db import models

class PersonGroup(models.Model):
    id = models.AutoField(primary_key=True)
    groupName = models.CharField(max_length=30)    
    detail = models.CharField(max_length=200)

class Person(models.Model):
    id = models.AutoField(primary_key=True)
    personId = models.CharField(max_length=20)
    personName = models.CharField(max_length=20)    
    state = models.IntegerField()
    personGroup = models.ManyToManyField(PersonGroup, related_name="person_list", blank=True) 

序列化程序.py

class PersonSerializer(serializers.ModelSerializer):
    personGroup = serializers.PrimaryKeyRelatedField(queryset=PersonGroup.objects.all(), many=True)
    class Meta:
        model = Person
        fields = '__all__'

class PersonGroupSerializer(serializers.ModelSerializer):
    person_list = PersonSerializer(many=True, read_only=True)
    class Meta:
        model = PersonGroup
        fields = '__all__'

上面的代码帮助我创建带有 personGroup 选择的人 在此处输入图像描述

但是,我还想在创建 personGroup 时添加人员选择。目前在创建 personGroup 时,我不允许输入人员。 在此处输入图像描述

请让我知道是否有任何解决方案可以让我在创建人员组时还可以选择可用人员。

标签: pythondjango-modelsdjango-rest-framework

解决方案


person_list在 中的字段PersonGroupSerializer是只读的,因此您无法使用 API 对其进行修改。

person_list = serializers.PrimaryKeyRelatedField(queryset=Person.objects.all(), many=True)

尝试删除此参数。

您可能还想切换到 ForeignKey 字段而不是 slugged。


推荐阅读