python - 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 时,我不允许输入人员。
请让我知道是否有任何解决方案可以让我在创建人员组时还可以选择可用人员。
解决方案
您person_list
在 中的字段PersonGroupSerializer
是只读的,因此您无法使用 API 对其进行修改。
person_list = serializers.PrimaryKeyRelatedField(queryset=Person.objects.all(), many=True)
尝试删除此参数。
您可能还想切换到 ForeignKey 字段而不是 slugged。
推荐阅读
- netflix-zuul - 去除前缀以移除 URL 中传递的环境
- delphi - Delphi 2007 - 使用 IDE 进行调试,但调试输出转到 DebugView(++)
- haskell - 你如何正确地实现和验证感知器和梯度下降来学习 Haskell 中的基本布尔函数?
- javascript - 如何删除 google-ima SDK 中的广告倒计时?
- php - 在现有页面上使用 AJAX 调用加载新视图时,如何在其中显示现有的 php 变量?
- python - 从表中删除零
- python - 如何使用python找到各种.csv文件的所有列的平均值,仅保持单个标题和第一个标签列相同?
- sql-server - 从控制器内部的 CRUD 操作调用存储过程(ASP.NET Core MVC)
- firebase-authentication - Firebase Auth User 对象:如何访问“Created”或“SignedIn”属性?
- swift - 如何使用 sprite Kit 制作自动卷轴游戏?