gpt4 book ai didi

python - Django Rest 框架 - 从 json 创建或更新值

转载 作者:行者123 更新时间:2023-11-30 22:07:58 24 4
gpt4 key购买 nike

我对 Django 和 Django Rest Framework 非常陌生。我有一个API,其json格式如下(为了简单起见,简化版本)

{
"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 模型一起保存?

如果您需要更多信息,请告诉我

提前致谢

最佳答案

我认为你可以使用 Django 的 get_or_create()方法为,

def create(self, validated_data):
tags = validated_data.pop('tags')
post = Post.objects.create(**validated_data)
for tag in tags:
tag_obj, create = Tag.objects.<b>get_or_create(name=tag)</b>
post.tags.add(tag_obj)
return post

get_or_create() 方法将返回一个 (object,created) 元组,其中 object 是检索或创建的对象和创建的是一个 bool 值,指定是否创建了新对象。

关于python - Django Rest 框架 - 从 json 创建或更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com