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 № 1Bem, 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.