Django Rest Framework — сериализация отношений моделей

#django #django-rest-framework #many-to-many

#django #django-rest-framework #многие ко многим

Вопрос:

Я уже некоторое время работаю над этой проблемой и не могу понять, что я делаю неправильно. Я пытаюсь добавить связь «многие ко многим» между двумя моделями, используя Django REST framework, используя PrimaryKeyRelatedField, но не могу сохранить связь.

Приведенный ниже код сохраняет только что созданный элемент first_model, но он не сохраняет отношения (если я просматриваю таблицу отношений, она остается пустой)

Любые советы о том, где я ошибаюсь, будут оценены!

Вот фрагмент кода, который у меня есть: вот представления:

 @api_view(['POST'])
def RiskCreate(request):
    serializer = First_ModelSerializer(data = request.data)

    if serializer.is_valid():
        serializer.save()
    else:
        print("data is not valid")

    return Response(serializer.data)
 

Вот модели:

 class First_Model(models.Model):

    Model_Title = models.CharField(max_length = 500, blank=True)
    Model_Descr = models.CharField(max_length = 500, blank=True)
    relationship = models.ManyToManyField(Second_Model)

class Second_Model(models.Model):
    Title_two = models.CharField(max_length = 50, unique = True)
    Descr_two = models.CharField(max_length = 50, unique = True)
 

Вот сериализатор:

 class First_ModelSerializer(serializers.ModelSerializer):
    relationship = serializers.PrimaryKeyRelatedField(many = True, read_only=True)

    class Meta:
        model = Risks
        fields = ('Model_Title', 'Model_Descr', 'relationship')
 

И вот как я передаю данные в представление:

 function addHazard(item){
        var url = baseurl   'api/Create/'
        var ID = item.id
        var Model_Title = document.getElementById('Model_Title').value
        var Model_Descr = document.getElementById('Model_Descr').value
        fetch (url, {
            method:'POST',
            headers:{
                'Content-type':'application/json',
                'X-CSRFToken': csrftoken
            },
            body:JSON.stringify({'Model_Title':Model_Title, 'Model_Descr':Model_Descr, 'relationship': [{'id':ID}]})
        })
 

Ответ №1:

Проблема read_only=True в relationship поле, объяснение в документах

просто удалите его,

 relationship = serializers.PrimaryKeyRelatedField(many = True)