/ / Por que o django-rest-framework (usando django-nonrel com mongodb) configura como pks de objeto-filho nulo ao atualizar uma instância - django, mongodb, django-rest-framework, django-nonrel

Por que o django-rest-framework (usando django-nonrel com o mongodb) configura para pks de objetos-filhos nulos ao atualizar uma instância - django, mongodb, django-rest-framework, django-nonrel

Isso acontece com qualquer instância de objeto que contenha modelos incorporados. Quando tento atualizar a instância pai, ela define como nula suas PKs childs.

Este é um extrato de um objeto json já atualizado:

{
"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"
}
]
}
}
}
},

e este é o modelo:

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))

com seu serializador definido como:

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")

Respostas:

0 para resposta № 1

Bem, descobri o motivo dos documentos do django-rest-framework. O problema é que a estrutura não lida com isso e deve ser implementada por nós.

O documento diz:

Porque o comportamento de aninhados cria eas atualizações podem ser ambíguas e podem exigir dependências complexas entre os modelos relacionados, a estrutura REST 3 exige que você sempre escreva esses métodos explicitamente. Os métodos padrão ModelSerializer .create () e .update () não incluem suporte para representações aninhadas graváveis.