使用序列化程序更新三级嵌套django模型

时间:2017-11-09 15:33:46

标签: django django-rest-framework django-serializer

我正在尝试更新我的一个模型(这是一个嵌套模型 - 实际上你可以在下面看到三个级别)并且我收到以下错误:

  

AssertionError:默认情况下,.update()方法不支持可写的嵌套字段。为序列化器SystemSettingsSerializer编写显式的.update()方法,或在嵌套的序列化器字段上设置read_only = True。

我一直在阅读有关嵌套模型和嵌套序列化程序的一整天,尝试将updatecreate方法设置字段设置为read_only=True,但无论我做了什么,它都没有'工作:( :(

这些是我的模特:

class SystemSettings(models.Model):
    # ... some fields


class Components(models.Model):
    settings = models.ForeignKey(SystemSettings, related_name="Components")


class SysComponent(models.Model):
    class Meta:
        abstarct = True

    index = models.PositiveIntegerField(primery_key=True)
    is_active = models.BooleanField(default=False)
    component = NotImplemented


class Foo(SysComponent):
    component = models.ForeignKey(Components, related_name="Foo")


class Bar(SysComponent):
    component = models.ForeignKey(Components, related_name="Bar")
    task_id = models.PositiveIntegerField(default=0)

和序列化器:

class SystemSettingsSerializer(ModelSerializer):
    Components = ComponentsSerializer(many=True)

    class Meta:
        model = SystemSettings
        fields = [# some fields,
                  Components]


class ComponentsSerializer(ModelSerializer):
    Foo = FooSerializer(many=True)
    Bar = BarSerializer(many=True)

    class Meta:
        model = Components
        fields = ['Foo',
                  'Bar']                  


class FooSerializer(ModelSerializer):
    class Meta:
        model = Foo


class BarSerializer(ModelSerializer):
    class Meta:
        model = Bar

我的逻辑如下: 我通过SystemSettings提取GET并以表格形式显示。 用户可以根据需要进行更改,点击提交后,我会通过PUT将其发回。

正如我所说,点击提交后我收到了上述错误。 任何帮助将不胜感激。

编辑:我顺便使用django 1.7.8

0 个答案:

没有答案