#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)