Django rest framework 如何在django rest中处理M2M关系
让我们从django文档中使用的关于M2M关系的模型开始,M2M关系使用through参数指向将充当中介的模型Django rest framework 如何在django rest中处理M2M关系,django-rest-framework,Django Rest Framework,让我们从django文档中使用的关于M2M关系的模型开始,M2M关系使用through参数指向将充当中介的模型 班级人员(models.Model): name=models.CharField(最大长度=128) def ___; unicode(自): 返回self.name 类别组(models.Model): name=models.CharField(最大长度=128) 成员=模型.ManyToManyField(个人, 通过会员资格) def ___; unicode(自): 返回s
班级人员(models.Model):
name=models.CharField(最大长度=128)
def ___; unicode(自):
返回self.name
类别组(models.Model):
name=models.CharField(最大长度=128)
成员=模型.ManyToManyField(个人,
通过会员资格)
def ___; unicode(自):
返回self.name
班级成员资格(models.Model):
person=型号。外键(person)
组=型号。外键(组)
date\u joined=models.DateField()
类元:
订购=[“加入日期”]
假设现在我想为组模型创建一个rest读写视图,其中还包含每个组中的所有人员,按日期排序\u加入字段。我希望获得的json序列化如下(仅使用其id描述成员):
{
“id”:1,
“名称”:“U2”,
“成员”:[
20,
269,
134,
12,
]
}
我编写了一个序列化程序:
class GroupSerializer(serializers.ModelSerializer):
members=serializers.SlugRelatedField(source='membership\u set',
多=真,
只读=错误,
slug\u field='person\u id',
必需=真)
类元:
模型=组
字段=('id','name','members')
对于读操作,它工作得很好,但对于写操作,它却不起作用。我应该如何定义序列化程序,以便在给定上述定义的序列化的情况下,它将通过以下方式继续进行:
def post_save(self, obj, created=False):
# obj represents the Group object
if created:
# Test to see if the Group was successfully created
members = self.request.DATA.get('members', None)
if members not None:
for id in members:
person = Person.objects.get(id=id)
membership, m_created = Membership.objects.get_or_create(person=person, group=obj)
# Here you can use m_created to see if the membership already existed and to do whatever else you need.
此实现假设您现在已声明您的日期与自动日期。如果没有,您也应该将其作为参数传递。感谢您给我的明确答案,以及文档相关部分的链接或作者关于这一点的答案。遗憾的是,我试图做的事情没有得到框架的太多支持。你能不能建议我一个方法,通过自己写代码来完成这项任务?正确的方法是什么?再次感谢你!我很高兴我能帮上忙:)至于创建部分,你可以在两个地方做:post/create方法或post\u save方法。我建议在post_save中完成,因为这意味着您允许框架创建组对象,剩下要做的就是添加成员。我将用一个小的代码片段来编辑我的答案,了解如何使用这个方法。非常感谢您,非常感谢您的支持!