我在模板中获取选择字段的ID。但是我想显示选择字段的名称。请查看以下文件,并让我知道如何获取名称。
这是我的models.py
================================================== =============
class Posted(models.Model):
name = models.CharField(_('Posted In'),max_length=255, unique=True)
class Tags(models.Model):
name = models.CharField(_('Tag Name'),max_length=255, unique=True)
class Blogs(models.Model):
author = models.ForeignKey(CustomUser)
title=models.CharField(max_length=100)
posted=models.ForeignKey(Posted, blank=True)
tags= models.ManyToManyField(Tags, blank=True)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
serializers.py
class BlogsSerializer(serializers.ModelSerializer):
author = AccountSerializer(read_only=True,required=False)
class Meta:
model = Blogs
fields = ('id','author','title','tags','posted','content','created_at','updated_at')
read_only_fields=('id','created_at','updated_at')
class TagsSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta:
model = Tags
fields = ('id','name')
read_only_fields=('id','name')
class PostedSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
class Meta:
model = Posted
fields = ('id','name')
read_only_fields=('id','name')
views.py
class BlogViewSet(viewsets.ModelViewSet):
queryset=Blogs.objects.order_by('-created_at')
serializer_class= BlogsSerializer
def get_permissions(self):
if self.request.method in permissions.SAFE_METHODS:
return (permissions.AllowAny(),)
return (permissions.IsAuthenticated(),IsAuthorOfBlog(),)
def perform_create(self,serializer):
serializer.save(author=self.request.user)
return super(BlogViewSet,self).perform_create(serializer)
class TagsViewSet(viewsets.ModelViewSet):
queryset=Tags.objects.all
serializer_class= TagsSerializer
class PostedViewSet(viewsets.ModelViewSet):
queryset=Posted.objects.all
serializer_class= PostedSerializer
模板
<div class="row">
<div class="col-sm-12">
<div class="well">
<div class="blog">
<div class="blog__meta">
<a href="#">
+{{ blog.author.first_name }}
</a>
</div>
<div class="blog__content">
<p>{{ blog.title }}</p>
<p>{{ blog.posted}}</p>
<p>{{ blog.tags}}</p>
<p>{{ blog.content }}</p>
</div>
</div>
</div>
</div>
</div>
提前致谢
最佳答案
您可以使用SlugRelatedField选项将特定字段作为关系对象返回。例如,
class BlogsSerializer(serializers.ModelSerializer):
author = AccountSerializer(read_only=True,required=False)
tags = serializers.SlugRelatedField(
many=True,
read_only=True,
slug_field='name'
)
class Meta:
model = Blogs
fields = ('id','author','title','tags','posted','content','created_at','updated_at')
read_only_fields=('id','created_at','updated_at')