【问题标题】:Django REST Framework -- is multiple nested serialization possible?Django REST Framework - 可以进行多重嵌套序列化吗?
【发布时间】:2014-08-11 21:16:06
【问题描述】:

我想做如下的事情:

models.py

class Container(models.Model):
    size  = models.CharField(max_length=20)
    shape = models.CharField(max_length=20)

class Item(models.Model):
    container = models.ForeignKey(Container)
    name  = models.CharField(max_length=20)
    color = models.CharField(max_length=20)

class ItemSetting(models.Model):
    item = models.ForeignKey(Item)
    attribute_one = models.CharField(max_length=20)
    attribute_two = models.CharField(max_length=20)

serializers.py

class ItemSettingSerializer(serializers.ModelSerializer):
    class Meta:
        model = ItemSetting


class ItemSerializer(serializers.ModelSerializer):
    settings = ItemSettingSerializer(many=True)

    class Meta:
        model = Item
        fields = ('name', 'color', 'settings')


class ContainerSerializer(serializers.ModelSerializer):
    items = ItemSerializer(many=True)

    class Meta:
        model = Container
        fields = ('size', 'shape', 'items')

当我只嵌套一层(容器和项目)时,它对我有用。但是当我尝试使用 ItemSetting 添加另一个级别的嵌套时,它会抛出 AttributeError 并抱怨 'Item' object has no attribute 'settings'

我做错了什么?

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    多重嵌套序列化对我有用。唯一的主要区别是我为 FK 关系指定了一个 related_name。所以尝试这样做:

    class Item(models.Model):
        container = models.ForeignKey(Container, related_name='items')
    
    class ItemSetting(models.Model):
        item = models.ForeignKey(Item, related_name='settings')
    

    希望这对你有用。

    【讨论】:

    • 谢谢。这是我的问题——原来我只在模型定义中的一个类上设置了related_name。
    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2023-01-10
    • 2018-06-04
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多