У меня есть Course
, TeacherProfile
и StudentProfile
модели со следующими отношениями:
class Course(models.Model):
students = models.ManyToManyField(
StudentProfile,
blank=True,
related_name='students'
)
teachers = models.ManyToManyField(
TeacherProfile,
blank=True,
related_name='teachers'
)
name = models.CharField(max_length=30, blank=False)
class TeacherProfile(models.Model):
user = models.OneToOneField('CoursesUser', on_delete=models.CASCADE)
class StudentProfile(models.Model):
user = models.OneToOneField('CoursesUser', on_delete=models.CASCADE)
Когда я пытаюсь создать новый курс с помощью запроса POST с телом:
{
"name": "Course",
"students": [],
"teachers": []
}
Я хочу добавить request.user
к учителям. Это мое мнение для Course
class CourseList(generics.ListAPIView):
queryset = Course.objects.all()
serializer_class = CourseSerializer
def post(self, request, format=None):
serializer = CourseSerializer(data=request.data)
if serializer.is_valid():
serializer.save(creator=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
И сериализатор для Course
модели:
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = ['id', 'name', 'students', 'teachers']
def create(self, validated_data):
creator_profile_id = TeacherProfile.objects.filter(
user__id=validated_data['creator'].id
)[0].id
validated_data['teachers'].append(creator_profile_id)
return Course(**validated_data)
Но есть
Прямое назначение передней стороне множества «многие ко многим» запрещено. Вместо этого используйте student.set ().
Я не понимаю, как использовать `` `set ()` `в моем случае