Добавление поля в Django REST без поля в экземпляре сериализатора - PullRequest
0 голосов
/ 22 марта 2020

У меня 3 модели: Post, Topic, PostTopic. PostTopic содержит все темы, связанные с Post. Модели выглядят так:

class Topic(models.Model):
    name = models.CharField(max_length=25, unique=True)

    def save(self, *args, **kwargs):
        topic = Topic.objects.filter(name=self.name)

        if topic:
            return topic[0].id

        super(Topic, self).save(*args, **kwargs)
        return self.id

class PostTopic(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    post= models.ForeignKey(Post, on_delete=models.CASCADE)

Модель Topic не может иметь 2 одинаковых тем. Вот как выглядит мой сериализатор:

class PostSerializer(serializers.ModelSerializer):
    topics = serializers.ListField(
         child=serializers.CharField(max_length=256), max_length=3
    )

    class Meta:
        model = Post
        fields = ('user', 'status', 'topics')

    def create(self, validated_data):
        topics= validated_data.pop('topics')
        post = Post.objects.create(**validated_data)

        for topic in topics:
             topic_id = Topic(name=topic).save()
             PostTopic(post_id=post.id, topic_id=topic_id).save()

        return post

Однако я получаю сообщение об ошибке:

Получил AttributeError при попытке получить значение для поля topics на сериализаторе PostSerializer. Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Post.

Я понимаю, что делаю неправильно, но не уверен, как это исправить где я могу сохранить топи c в PostTopic тоже. Есть ли лучший способ сделать это?

...