Как редактировать поле встроенной модели в django
У меня есть следующие модели:
ModelA
--> с полями flda1
, flda2
, fld3
и id
ModelB
--> с полями fldb1
, fldb2
, id
и a_obj = foreign-key-to-ModelA
Теперь мне нужно написать представление для обновления flda1
и flda2
из ModelA
и fldb1
из ModelB
ресурсов, имеющих foreign-key-to-same(ModelA)
[некоторые (не все) - т.е. не все b_objs
должны быть изменены ]
Данные обновления должны быть отправлены следующим образом :
data = {
'flda1' : 'PRADEEP 2 title CHANGED',
'flda2' : 'medium CHANGED again...',
"b_objs" : [
{'fldb1':'TB', 'modela':99, 'id':184},
{'fldb1':'STF', 'modela':99, 'id':185}
]
}
А параметр запроса содержит id
для ModelA
.
Проблема в том, что представление и сериализатор работают правильно для flda1
и flda2
. Но когда я добавляю b_objs
, я получаю ошибки.
Вот мое мнение:
class ViewA(RetrieveUpdateDestroyAPIView):
queryset = ModelA.objects.all().prefetch_related('b_objs')
serializer_class = ModelASerializer
def update(self, request, *args, **kwargs):
modela_id = = request.query_params['id']
modela_ins = queryset.filter(pk=modela_id).first()
serializer = self.get_serializer(project, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
serializer.save()
А сериализаторы - это :
class ModelBSerializer(serializers.ModelSerializer):
class Meta :
model = ModelB
fields = '__all__'
class ModelASerializer(serializers.ModelSerializer):
obj_bs = ModelBSerializer(many=True)
def validate(self, data) :
# validation code
return data
def update(self, instance, validated_data):
print(validated_data)
for field, value in validated_data.items():
setattr(instance, field, value)
instance.save() # this saves ModelA fields
return instance
Проблема в том, что validated_data
в update
не показывает id
в b_objs
, который отправляется в data
.
Поэтому я не могу отфильтровать ресурсы ModelB из базы данных и внести в них изменения
Как сделать