【发布时间】:2018-09-14 09:43:45
【问题描述】:
我对 Django 和 Django Rest Framework 非常陌生。我有一个 json 格式如下的 API(为简单起见,简化版)
{
"title" : "Lorem ipsum is a dummy title",
"content" : "Lorem ipsum is a demo content"
"tags" : ["Movies", "Food"]
}
这是我的模型的样子:
class Tag(models.Model):
class Meta:
verbose_name_plural = "Tags"
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Post(models.Model):
class Meta:
verbose_name_plural = "Posts"
title = models.CharField(max_length=255)
content = models.TextField()
tags = models.ManyToManyField(Tag, blank=True)
def __str__(self):
return self.title
这是我的序列化程序(标签、帖子)的样子:
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = '__all__'
name = serializers.CharField(max_length=200)
def create(self, validated_data):
return Tag.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.save()
return instance
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title', 'content', 'tags')
title = serializers.CharField(max_length=250)
content = serializers.CharField(max_length=1000)
tags = serializers.PrimaryKeyRelatedField(many=True, queryset=Tag.objects.all())
def create(self, validated_data):
tags = validated_data.pop('tags')
# [do i need to look for tags, create if not exists and retrieve the ids]
post = Post.objects.create(**validated_data)
for tg in tags:
post.tags.add(tg)
return post
def update(self, instance, validated_data):
instance.title = validated_data.get('title', instance.title)
instance.content = validated_data.get('content', instance.content)
tags = validated_data.pop('tags')
# [do i need to check for tags, create if not exists and retrieve the ids]
instance.save()
return instance
所以我希望使用标签保存帖子详细信息,以便在不存在时创建标签。由于我是 django 和 rest 框架的新手,我不确定是否有一些开箱即用的功能可以实现这一点。或者我是否需要在我的 PostSerializer 中编写一些代码来手动创建新标签并返回 id,然后将它们与 post 模型一起保存?
如果您想了解更多信息,请告诉我
提前致谢
【问题讨论】:
标签: python django django-rest-framework