django taggit-serializer 不在 rest 框架中创建标签
django taggit-serializer not create tags in rest framework
这是我的 models.py
class Post(models.Model):
author=models.ForeignKey(User,on_delete=models.CASCADE,related_name="post")
title=models.CharField(max_length=128,null=True,blank=True)
rate=models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(5)],default=True,null=True,blank=True)
# rating=models.IntegerField(null=True,blank=True)
content=models.TextField(null=True,blank=True)
review=models.CharField(max_length=250,null=True,blank=True)
url=models.URLField(null=True,blank=True)
voters = models.ManyToManyField(settings.AUTH_USER_MODEL,blank=True,related_name="post_voters")
tags = TaggableManager()
在我的 serializers.py
我已经导入
from taggit_serializer.serializers import (TagListSerializerField,
TaggitSerializer)
这里是 post 序列化器
class Spost(serializers.ModelSerializer,TaggitSerializer):
tags = TagListSerializerField()
author=serializers.StringRelatedField(read_only=True)
# likes_count=serializers.SerializerMethodField(read_only=True)
# user_has_voted=serializers.SerializerMethodField(read_only=True)
## for string related field without displaying it as numerics , it displays the direct object of that object"
# user=Scomments()
class Meta:
model = Post
fields = ('id','title','rate','author','content','review','url','tags')
def get_likes_count(self,instance):
return instance.voters.count()
def get_user_has_voted(self,instance):
request=self.context.get("request")
return instance.voters.filter(pk=request.user.pk).exists()
但我现在面临的问题是,每当我触发带有正在创建对象的标签的 post 请求时,我正在获取该对象以及正在创建的标签,但是当我在管理面板中看到标签部分未更新
{
"rate": 4,
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": [
"django",
"python"
]
}
这是 post 请求,在 postman 中我可以看到更新后的请求
{
"id": 122,
"title": null,
"rate": 4,
"author": "User",
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": [
"django",
"python"
]
}
但是当我在 Django 管理面板和 json 所有对象列表中看到同样的东西时,我可以看到标签部分是空白的
{
"id": 122,
"title": null,
"rate": 4,
"author": "User",
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": []
}
class Spost(TaggitSerializer, serializers.ModelSerializer):
tags = TagListSerializerField()
此处您必须将 TaggitSerializer
作为序列化程序中的第一个参数传递。当您从它继承 TagListSerializerField
字段时。
这是我的 models.py
class Post(models.Model):
author=models.ForeignKey(User,on_delete=models.CASCADE,related_name="post")
title=models.CharField(max_length=128,null=True,blank=True)
rate=models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(5)],default=True,null=True,blank=True)
# rating=models.IntegerField(null=True,blank=True)
content=models.TextField(null=True,blank=True)
review=models.CharField(max_length=250,null=True,blank=True)
url=models.URLField(null=True,blank=True)
voters = models.ManyToManyField(settings.AUTH_USER_MODEL,blank=True,related_name="post_voters")
tags = TaggableManager()
在我的 serializers.py 我已经导入
from taggit_serializer.serializers import (TagListSerializerField,
TaggitSerializer)
这里是 post 序列化器
class Spost(serializers.ModelSerializer,TaggitSerializer):
tags = TagListSerializerField()
author=serializers.StringRelatedField(read_only=True)
# likes_count=serializers.SerializerMethodField(read_only=True)
# user_has_voted=serializers.SerializerMethodField(read_only=True)
## for string related field without displaying it as numerics , it displays the direct object of that object"
# user=Scomments()
class Meta:
model = Post
fields = ('id','title','rate','author','content','review','url','tags')
def get_likes_count(self,instance):
return instance.voters.count()
def get_user_has_voted(self,instance):
request=self.context.get("request")
return instance.voters.filter(pk=request.user.pk).exists()
但我现在面临的问题是,每当我触发带有正在创建对象的标签的 post 请求时,我正在获取该对象以及正在创建的标签,但是当我在管理面板中看到标签部分未更新
{
"rate": 4,
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": [
"django",
"python"
]
}
这是 post 请求,在 postman 中我可以看到更新后的请求
{
"id": 122,
"title": null,
"rate": 4,
"author": "User",
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": [
"django",
"python"
]
}
但是当我在 Django 管理面板和 json 所有对象列表中看到同样的东西时,我可以看到标签部分是空白的
{
"id": 122,
"title": null,
"rate": 4,
"author": "User",
"content": "content",
"review": "dsfdf",
"url": "http://google.com",
"tags": []
}
class Spost(TaggitSerializer, serializers.ModelSerializer):
tags = TagListSerializerField()
此处您必须将 TaggitSerializer
作为序列化程序中的第一个参数传递。当您从它继承 TagListSerializerField
字段时。