【发布时间】:2015-04-26 16:22:55
【问题描述】:
我正在尝试在 DRF 3 中创建一个参考应用程序来演示可以创建/更新模型的嵌套序列化程序。下面的示例代码在尝试创建嵌套模型时使用“*create() 参数在 ** 后必须是映射,而不是列表*”进行炸弹。我也不清楚如何处理 .update() ,因为在某些情况下我只想建立额外的关系(人)。
样本模型:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
persons = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
还有序列化器和视图集:
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet
from app.models import Group, Person
class PersonSerializer(ModelSerializer):
class Meta:
model = Person
class GroupSerializer(ModelSerializer):
persons = PersonSerializer(many=True)
def create(self, validated_data):
persons = validated_data.pop('persons')
group = Group.objects.create(**validated_data)
if persons: # Bombs without this check
Person.objects.create(group=group, **persons) # Errors here
return group
class Meta:
model = Group
class PersonModelViewSet(ModelViewSet):
serializer_class = PersonSerializer
queryset = Person.objects.all()
class GroupModelViewSet(ModelViewSet):
serializer_class = GroupSerializer
queryset = Group.objects.all()
我正在尝试发布一些 JSON 来插入一个包含两个(相关)人员的组:
{
"persons": [
{ "name" : "name 1" },
{ "name" : "name 2" }
],
"name": "group name 1"
}
【问题讨论】:
标签: python django django-rest-framework