Как работать с несохраненными вложенными моделями в сериализаторе?
Мой вход - это объект 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__'