/ / Prečo sa django-rest-framework (pomocou django-nonrel s mongodb) nastaví na null detských objektov PK pri aktualizácii inštancie - django, mongodb, django-rest-framework, django-nonrel

Prečo sa django-rest-framework (pomocou django-nonrel s mongodb) nastaví na null podradené objekty PK pri aktualizácii inštancie - django, mongodb, django-rest-framework, django-nonrel

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ď č. 1

Dô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í.