Создание экземпляра модели, состоящего из поля "многие-ко-многим
Я пытаюсь создать экземпляр модели с помощью post-запроса, однако у меня возникла одна проблема: модель состоит из поля, которое является полем "многие-ко-многим". Сейчас я нахожусь на этапе, когда у меня есть массив, состоящий из первичных ключей экземпляров модели (Модули), которые я хочу связать с моделью, которую я пытаюсь создать (Студент).
Пожалуйста, посмотрите мой код ниже, так как я не знаю, где я ошибаюсь, после некоторых базовых исследований кажется, что мне нужно использовать метод .set()
.
PUT['modules']
соответствует array
, который состоит из значений [1,2,3,5]
.
def create_student(request):
"""API for creating a student"""
if request.method == "POST":
PUT = json.loads(request.body)
student = Student(name=PUT['name'], join_date=PUT['join_date'], academic_year=PUT['academic_year'],
modules=PUT['modules'] # THIS IS WHERE I NEED HELP
)
student.save()
return JsonResponse(student.to_dict())
return HttpResponseBadRequest("Invalid method")
Спасибо за ваше время.
Для того чтобы создать отношение ManyToManyField
, сначала необходимо сохранить два элемента, которые вы хотите связать. Это необходимо, так как иначе у них не будет первичного ключа: связывание двух элементов осуществляется путем добавления записи в таблицу junction table с двумя первичными ключами для связи.
Если вы хотите связать создаваемую вами Student
с модулями, вы сначала создаете student
, а затем можете использовать student.modules.add(…)
для связи ее с (существующими) модулями, распаковывая список первичных ключей модулей:
def create_student(request):
"""API for creating a student"""
if request.method == "POST":
PUT = json.loads(request.body)
student = Student.objects.create(
name=PUT['name'], join_date=PUT['join_date'], academic_year=PUT['academic_year']
)
student.modules.add(*PUT['modules'])
return JsonResponse(student.to_dict())
else:
# …