python - 使用 Django Rest Framework 的双嵌套序列化器

标签 python django serialization django-rest-framework

使用 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/

相关文章:

python - 设置 setuptools 以创建具有可用 header 的可导入包

python - 如何避免 Django View 中的重复代码?

java - 自定义 BeanPropertyFilter - 仅序列化字符串的一部分

java - java中反序列化对象

C# Xml-使用 IXmlSerializable 序列化派生类

python - 抓取时如何限制结果的数量

python - 良好的声音处理/分析/捕获模块

python - 如何使用 Autobahn Python 和 Twisted Reconnecting ClientFactory 重新注册在重新连接后调用的 WAMP?

Django Rest 框架 imagefield 可选

mysql - django中出现字符编码错误不正确的字符串值: '\\xF0\\x9F\\x