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

Как сделать

Вернуться на верх