#python #django #serialization #django-rest-framework
#python #django #сериализация #django-rest-framework
Вопрос:
Я пытаюсь переопределить update
метод ModelSerializer
, чтобы я мог обновлять связанный набор объектов при обновлении экземпляра.
Проблема в том, что validated_data
не включает ids
эти объекты, даже когда я передаю их сериализатору.
def update(self, instance, validated_data):
subcontracts = validated_data.pop('subcontracts') # THERE ARE NO IDS HERE
contract = super().update(instance,validated_data)
instance.subcontracts.exclude(id__in=[x.get('id',None) for x in subcontracts if x is not None]).delete()
for subcontract in subcontracts:
_id = subcontract.get('id',None)
if _id:
sc = SubContract.objects.get(id=_id)
else:
sc = SubContract()
for attr, value in subcontract.items():
setattr(sc, attr, value)
sc.contract = instance
sc.save()
return contract
В принципе, то, что я хочу сделать:
{id:4, some_data..., subcontracts:[{id:1,description:'xxx'},{id:2,description:'yyy'}]}
Эти данные (за исключением обновления экземпляра) удалят связанные subcontracts
, не имеющие идентификатора 1 или 2, и обновят остальные.
Вы знаете, что делать?
Комментарии:
1. Без определения сериализатора и полезной нагрузки, которая вызывает проблему, трудно сказать.
2. Не могли бы вы опубликовать полный класс сериализатора с помощью мета-класса? Кроме того, каков тип
subcontracts
поля в вашем сериализаторе? Это другой экземпляр сериализатора или что-то еще?