我正在尝试更新我的一个模型(这是一个嵌套模型 - 实际上你可以在下面看到三个级别)并且我收到以下错误:
AssertionError:默认情况下,.update()方法不支持可写的嵌套字段。为序列化器SystemSettingsSerializer编写显式的.update()方法,或在嵌套的序列化器字段上设置read_only = True。
我一直在阅读有关嵌套模型和嵌套序列化程序的一整天,尝试将update
和create
方法设置字段设置为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