Django ManyToMany | TypeError: Прямое присвоение прямой стороне множества "многие ко многим" запрещено. Вместо этого используйте course_tags.set()

Моя модель:

class Course(models.Model):
    ...
    course_tags = models.ManyToManyField(CourseTag, related_name='course_tags', blank=True)
    ...

Мой сериализатор:

class CourseSerializer(serializers.ModelSerializer):
    ...
    course_tags = CourseTagsSerializer(many=True, required=False)
    ...
    class Meta:
        model = Course
        fields = [...'course_tags'...]

    def create(self, validated_data):
        ...
        tags_data = validated_data.pop('tags', None)
        ...
        course, _ = Course.objects.create(
            author=author, **validated_data)

        if tags_data:
            for tag in tags_data:
                new_tag, _ = CourseTag.get_or_create(title=tag.get('title'))
                course.course_tags.add(new_tag.id)
        course.save()

Я отправляю POST-запрос этому сериализатору. Ответ:

TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use course_tags.set() instead.

Я попробовал рабочий метод, но мой код не работает.

Поле является именем course_tags, поэтому вы должны использовать это имя при извлечении тегов из подтвержденных данных:

def create(self, validated_data):
    ...
    tags_data = validated_data.pop('course_tags', None)

В противном случае course_tags остается в validated_data и Course.objects.create() вызывает ошибку.

Вернуться на верх