Django REST: Получение pk объекта модели в контексте создания
Я нахожусь в середине проекта, в котором я создаю систему планирования для курсов. Курсы могут иметь определенное количество сессий. Я хочу, чтобы при создании курса создавалось количество пустых сессий (которые будут назначены позже), равное переменной в запросе курса ("class_count"). Каждая сессия имеет FK для профиля пользователя и курса. Логика у меня примерно такая:
serializer.save(instructor=self.request.user)
for sess in range(int(request.POST.get('class_count'))):
Session.objects.create(user=self.request.user.profile, session_active=True, course=request)
Session.save()
Однако, когда я делаю это, я получаю следующую ошибку:
ValueError: Cannot assign "<rest_framework.request.Request: POST '/create/'>": "Session.course" must be a "MyCourse" instance.
Как мне получить доступ к экземпляру только что созданной модели MyCourse?
Вы должны передать экземпляр MyCourse, как указано в сообщении об ошибке. Если данные вашего сериализатора содержат экземпляр MyCourse, вы можете использовать его. В противном случае вы можете получить соответствующий объект MyCourse, используя его первичный ключ. (Конечно, вы можете получить экземпляр MyCourse, используя другое уникальное поле (поля) в модели)
serializer.save(instructor=self.request.user)
# get course_id somehow
course = MyCourse.objects.get(id=course_id)
for sess in range(int(request.POST.get('class_count'))):
Session.objects.create(user=self.request.user.profile, session_active=True, course=course)
Session.save()
ОК, интересно. Решение двоякое. Спасибо Эрхану, который подсказал мне нужное решение. Полный код выглядит так:
course = MyCourse.objects.get(pk=serializer.data.get('id'))
for sess in range(int(request.POST.get('class_count'))):
Session.objects.create(user=self.request.user.profile,session_active=True, current_class=course)
Доступ к объекту MyCourse осуществляется через serializer.data.get('id)
, и Session.save()
не было необходимости. Спасибо всем, кто посмотрел.