使用 ModelSerializers 的 DRF 可以实现这一点吗?我最感兴趣的是看到一个可以重现的示例(如果可能的话)。
这是我的模型:
class Grandparent(Model):
g_name = CharField(max_length=10)
parent = ForeignKey('Parent')
class Parent(Model):
p_name = CharField(max_length=10)
child = ForeignKey('Child')
class Child(Model):
c_name = CharField(max_length=10)
这是我的序列化器:
class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = models.Child
fields = ('id', 'c_name')
class ParentSerializer(serializers.ModelSerializer):
child = ChildSerializer()
def create(self, validated_data):
child_data = validated_data.pop('child')
child, _ = models.Child.objects.get_or_create(**child_data)
return models.Parent.objects.create(child=child, **validated_data)
class Meta:
model = models.Parent
fields = ('id', 'p_name', 'child')
class GrandparentSerializer(serializers.ModelSerializer):
parent = ParentSerializer()
class Meta:
model = models.Grandparent
fields = ('id', 'g_name', 'parent')
这是我祖 parent 的观点:
class GrandparentList(generics.ListCreateAPIView):
queryset = models.Grandparent.objects.all()
serializer_class = serializers.GrandparentSerializer
这是我尝试发布到祖 parent View 时遇到的错误:
AttributeError at /grandparents/ 'list' object has no attribute 'get'
最佳答案
我们发现的问题是 DRF 提供的表单前端中的一个错误。直接通过 HTTP 调用时,嵌套序列化程序行为正确。
关于python - 使用 Django Rest Framework 的双嵌套序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212604/