首页 > 解决方案 > 在序列化程序实例上没有字段的情况下将字段添加到 Django REST

问题描述

我有 3 个模型:PostTopicPostTopicPostTopic包含与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

但是,我收到一条错误消息:

topics 尝试获取序列化程序上的字段值时出现 AttributeError PostSerializer。序列化器字段可能命名不正确,并且与Post实例上的任何属性或键都不匹配。

我知道我做错了什么,但我不确定如何修复它,我也可以在其中保存主题PostTopic。有一个更好的方法吗?

标签: djangodjango-modelsdjango-rest-framework

解决方案


推荐阅读