django - 在序列化程序实例上没有字段的情况下将字段添加到 Django REST
问题描述
我有 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
但是,我收到一条错误消息:
topics
尝试获取序列化程序上的字段值时出现 AttributeErrorPostSerializer
。序列化器字段可能命名不正确,并且与Post
实例上的任何属性或键都不匹配。
我知道我做错了什么,但我不确定如何修复它,我也可以在其中保存主题PostTopic
。有一个更好的方法吗?
解决方案
推荐阅读
- mediawiki - 如何使用 nginx 在 root 之外使用别名托管 Mediawiki 图像?
- python - PyGame,如何创建带有文本的按钮?
- git - Git:并行修复工作流程中的临时合并
- c++ - c++ 概念如何结合概念?
- python - FFT 信号的 Python 幅度
- laravel - 使用vuejs提交表单后如何清空字段并显示成功消息
- javascript - 从段落中删除锚标记,但使用 Javascript 保留文本
- php - RGB的PHP普通十六进制无法正常工作
- json - Azure DevOps powershell 任务 convertfrom-json 命令缺少一项数组
- sql - 你怎么知道一个 sql 查询返回了多少 MB?