Как редактировать поле встроенной модели в 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 из базы данных и внести в них изменения
Как сделать