代码之家  ›  专栏  ›  技术社区  ›  tadasajon

Django REST框架——多重嵌套序列化是可能的吗?

  •  3
  • tadasajon  · 技术社区  · 11 年前

    我想做以下事情:

    型号.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)
    

    序列化程序.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'

    我做错了什么?

    1 回复  |  直到 11 年前
        1
  •  4
  •   AdelaN    11 年前

    多个嵌套序列化对我有效。唯一的主要区别是我指定了 相关_名称 对于FK关系。所以尝试这样做:

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

    希望这对你有用。

    推荐文章