Stáva sa to s každou inštanciou objektu, ktorá obsahuje vložené modely. Keď sa pokúsim aktualizovať inštanciu otca, nastaví sa na nulu svojich detských PK.
Toto je výpis už aktualizovaného objektu json:
{
"pk": "558d023d153bd41930b3fcf0",
"checkgroup_id": "checkgroupid 5",
"name": "checkgroup five",
"description": "this an example description",
"control_config": {
"control_config_1": {
"pk": null,
"params": {
"param2": {
"pk": null,
"value": "value2",
"mandatory": false,
"default": "default"
},
"param1": {
"pk": null,
"value": "value1",
"mandatory": false,
"default": "default"
}
},
"exceptions": {
"exception1": {
"pk": null,
"description": "description example",
"params": [
{
"pk": null,
"value": "value1",
"mandatory": false,
"default": "default"
},
{
"pk": null,
"value": "value2",
"mandatory": false,
"default": "default"
}
]
}
}
}
},
a toto je Model:
class CheckGroup(models.Model):
"""It defines a set of controls to be applied. """
checkgroup_id = models.TextField(max_length=250)
name = models.TextField(max_length=250)
description = models.TextField(max_length=250)
control_config = DictField(EmbeddedModelField(ControlConfig))
controls = DictField(EmbeddedModelField(Control))
s jeho serializátorom definovaným ako:
class CheckGroupSerializer(serializers.ModelSerializer):
""" Transforms CheckGroup into json
"""
control_config = serializers.DictField(child=ControlConfigSerializer())
controls = serializers.DictField(child=ControlSerializer())
pk = serializers.CharField()
class Meta:
""" It lets to choose the model that will be serialize and its fields
"""
model = CheckGroup
fields = ("pk", "checkgroup_id", "name", "description", "control_config", "controls")
odpovede:
0 pre odpoveď č. 1Dôvod som zistil v dokumentoch django-rest-framework. Problém je v tom, že rámec sa tým nezaoberá a mali by sme ich implementovať.
Doktor hovorí:
Pretože chovanie vnorených vytvára aaktualizácie môžu byť nejednoznačné a môžu vyžadovať zložité závislosti medzi príbuznými modelmi. REST framework 3 vyžaduje, aby ste tieto metódy písali vždy explicitne. Predvolené metódy ModelSerializer .create () a .update () nezahŕňajú podporu zapisovateľných vnorených reprezentácií.