Skip to main content
 首页 » 编程设计

python之如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id

2024年10月17日33txw1958

我正在获取模板中选择字段的 ID。但我希望显示选择字段的名称。请查看以下文件并告诉我如何获取名称。

这是我的模型.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) 

序列化器.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') 

View .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')