Как работать с несохраненными вложенными моделями в сериализаторе?

Мой вход - это объект JSON, который представляет видео канал. Он имеет некоторые простые поля и поля, содержащие массив, например, tags.

Я хочу разобрать JSON, превратить его в Channel объект модели, который tags свойство со списком Tag объектов модели. Я настроил это как отношения "многие ко многим".

Тэг имеет только 1 поле: title, но вход JSON представляет собой анонимный массив, например "tags": ["tag1", "tag2",...].

При

на channelSerializer.is_valid() происходит сбой. Я преобразовал входной сигнал из "tags": ["tag1"] в "tags": ["title": "tag"], что сработало, но я не люблю халтурные решения.

Я нахожусь в точке создания сервиса, вытаскиваю tags, создаю объекты канала, конвертирую tags самостоятельно и добавляю его в channel... но я чувствую, что мне не хватает лучшего, стандартного метода.

Каков рекомендуемый подход для этой ситуации в Django?

Код, который определенно имеет некоторые проблемы:

class Tag(models.Model):
    title = models.CharField(unique=True, null=True, blank=True, max_length=255)

    class Meta:
        db_table = "tag"

class Channel(models.Model):
    tags = models.ManyToManyField(Tag)


class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ['title']

    def create(self, validated_data):
        return Tag.objects.create(title=validated_data)


class ChannelSerializer(serializers.ModelSerializer):
    tags = TagSerializer(many=True, read_only=False, required=False)

    class Meta:
        model = Channel
        fields = '__all__'
Вернуться на верх