我想做以下事情:

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'

我究竟做错了什么?

最佳答案

多重嵌套序列化对我有用。唯一的主要区别是,我为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')


希望这对您有用。

09-30 17:21
查看更多