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

     2023-02-24     262

关键词:

【中文标题】如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id【英文标题】:How to get Model Choice Field name instead of id in template using django rest framework 【发布时间】:2017-01-04 20:04:04 【问题描述】:

我在模板中获得了选择字段的 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)

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

提前致谢

【问题讨论】:

【参考方案1】:

你所说的选择是什么意思?我在 Field kwargs 中看不到 choices。您可以通过例如设置选择字段: chairs = models.IntegerField(max_length=255, choices=CHOICES) 你到底从哪里得到 id 而不是 name ?

【讨论】:

选项来自两个表。发布和标记 .modelchoicefields 我重新创建了你的环境,这就是我完成的:在你的 BlogsSerializer 添加你的序列化程序,这会给你正确的 json 输出:class BlogsSerializer(serializers.ModelSerializer): posted = PostedSerializer() tags = TagsSerializer(many=True) 请注意,因为标签是多对多的关系,我们需要传递 kwarg many=True 并作为未来提示 - 在您的情况下尝试为模型使用单数名称,它将是 BlogTag 等。【参考方案2】:

您可以使用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')

【讨论】:

【参考方案3】:

感谢@Karol Sztajerwald。 是的,BlogsSerializer 必须这样制作。

最终博客 Serializer.py 是

class TagsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tags

        fields = ('id','name')
        read_only_fields=('id','name')

class PostedSerializer(serializers.ModelSerializer):
    class Meta:
        model = Posted

        fields = ('id','name')
        read_only_fields=('id','name')
class BlogsSerializer(serializers.ModelSerializer):
    author = AccountSerializer(read_only=True,required=False)
    tags=TagsSerializer(many=True)
    posted=PostedSerializer()
    class Meta:
        model = Blogs

        fields = ('id','author','title','tags','posted','content','created_at','updated_at')
        read_only_fields=('id','created_at','updated_at')

模板是

<p> blog.title </p>
<p> blog.posted.name</p>
<p> blog.tags.name</p>
<p> blog.content </p>

【讨论】:

如何在 Django REST 框架中使用事务?

】如何在DjangoREST框架中使用事务?【英文标题】:HowtousetransactionswithDjangoRESTframework?【发布时间】:2017-02-2212:07:10【问题描述】:我希望使用DjangoREST框架“一起”创建多个模型对象——即在单个事务中。目标是每个对象仅在事... 查看详情

如何在 django rest 框架中获取与外键相关的数据?

】如何在djangorest框架中获取与外键相关的数据?【英文标题】:Howtogetdatarelatedtoaforeignkeyindjangorestframework?【发布时间】:2017-08-1921:28:43【问题描述】:我要为一个活动创建一个约会,我的模型如下-事件/models.pyclassEvent(models.Model)... 查看详情

在 HTML 页面或模板中使用 Django-REST-Framework 从在 Django 中创建的 API 获取/显示 API 数据

】在HTML页面或模板中使用Django-REST-Framework从在Django中创建的API获取/显示API数据【英文标题】:Get/DisplayAPIdataatfrontendfromanAPIcreatedinDjangousingDjango-REST-FrameworkinanHTMLpageorTemplate【发布时间】:2019-12-2715:11:36【问题描述】:我使用Django... 查看详情

你如何在 django rest 框架中实现 CSRF 令牌?

】你如何在djangorest框架中实现CSRF令牌?【英文标题】:HowdoyouimplementCSRFtokensindjangorestframework?【发布时间】:2021-05-2014:25:37【问题描述】:我注意到,当使用django并且您发出发布请求时,例如使用表单,django要求您添加csrf令牌... 查看详情

django rest 框架身份验证

...令牌的身份验证,现在我试图从单独的项目中使用它。我如何使用用户名和密码登录并获取令牌作为响应,并在所有下一个url调用中使用标头中的令牌。在Shell中,我检查了其中一位用户的令牌,并从终端测试了 查看详情

django rest框架:在视图中获取url路径变量

...图中。在那里,我必须根据产品ID进行一些数据库操作。如何在该视图中获取该产品ID?实际上,ProductDetailConfiguration视图中的参数应该是 查看详情

我们如何使用基于函数的视图在 django rest 框架中发布数据?

】我们如何使用基于函数的视图在djangorest框架中发布数据?【英文标题】:HowdowePOSTdataindjangorestframeworkusingfunctionbasedviews?【发布时间】:2021-02-2818:31:17【问题描述】:我是djangorest框架(DRF)的新手,我需要使用基于函数的视图(FDV)... 查看详情

如何修复 Python(Django Rest 框架模板)中的 UnicodeDecodeError?

】如何修复Python(DjangoRest框架模板)中的UnicodeDecodeError?【英文标题】:HowtofixUnicodeDecodeErrorinPython(DjangoRestFrameworktemplate)?【发布时间】:2019-09-1302:25:53【问题描述】:我正在运行一个DjangoWeb应用程序并使用DjangoRestFramework创建一... 查看详情

django rest框架在序列化程序创建方法中获取请求

...10:49:00【问题描述】:我是学习djangorest框架的学生我尝试使用表单数据上传多个文件当我在邮递员中发送这样的请求时enterimagedescriptionhere发生错误,这是错误消息images_data=sel 查看详情

如何在 django-rest 框架中验证我的 JWT 令牌?

】如何在django-rest框架中验证我的JWT令牌?【英文标题】:HowtoauthenticatemyJWTtokenindjango-restframework?【发布时间】:2019-10-3123:59:32【问题描述】:我在Djangorest框架中实现了JWT令牌身份验证,它获取了我的令牌,但我遇到的问题是我... 查看详情

如何在 django REST 框架中修改 request.data

】如何在djangoREST框架中修改request.data【英文标题】:Howcanmodifyrequest.dataindjangoRESTframework【发布时间】:2016-02-2423:58:07【问题描述】:我正在使用DjangoREST框架request.data=\'"id":"10","user":"tom"\'我想添加额外的属性,比如"age":&qu... 查看详情

如何使用 Rest 在 SharePoint 中获取多个模板类型列表

】如何使用Rest在SharePoint中获取多个模板类型列表【英文标题】:HowtogetmultipletemplatetypeslistinSharePointusingRest【发布时间】:2021-08-2515:08:47【问题描述】:我正在尝试列出所有自定义列表和事件列表。这是我在URL中的代码url:"http://e... 查看详情

如何在 Django 中使用 RESTful API

】如何在Django中使用RESTfulAPI【英文标题】:HowtoUseRESTfulAPIswithDjango【发布时间】:2020-12-2503:08:24【问题描述】:我一直在尝试将使用Django-rest框架开发的RESTAPI与另一个DjangoWeb应用程序集成。但停留在将JSON数据传递到前端。我将... 查看详情

如何在 django rest 框架中对项目的删除 url 进行 url-reverse

】如何在djangorest框架中对项目的删除url进行url-reverse【英文标题】:Howtourl-reversethedeleteurlforanitemindjangorestframework【发布时间】:2018-12-1909:36:51【问题描述】:我正在测试我的删除项目API,但我无法确定如何获取删除请求的URL。... 查看详情

在Django rest框架中获取图像文件和字段

】在Djangorest框架中获取图像文件和字段【英文标题】:GetimagefileandfieldsinDjangorestframework【发布时间】:2021-09-0211:33:16【问题描述】:我正在尝试通过djangorestframework上传图片并返回自定义响应views.pyclassImageuploadviewset(viewsets.ModelVie... 查看详情

如何在由“站点”框架提供支持的多个 Django 站点中获取唯一用户?

】如何在由“站点”框架提供支持的多个Django站点中获取唯一用户?【英文标题】:HowtogetuniqueusersacrossmultipleDjangositespoweredbythe"sites"framework?【发布时间】:2010-11-2702:37:56【问题描述】:我正在构建一个Django站点框架,它... 查看详情

如何在 Django REST 框架可浏览 API 中发送标头

】如何在DjangoREST框架可浏览API中发送标头【英文标题】:HowtosendheadersinDjangorestframeworkbrowsableAPI【发布时间】:2017-02-0308:17:42【问题描述】:如何在DjangoREST框架可浏览API视图中发送标头,我通过匹配一个令牌来验证调用,并在标... 查看详情

如何在 django rest 框架中仅使用特定变体对象将项目添加到愿望清单?

】如何在djangorest框架中仅使用特定变体对象将项目添加到愿望清单?【英文标题】:Howtoadditemtowishlistwithonlyspecificvariantobject(s)indjangorestframework?【发布时间】:2021-03-0909:21:11【问题描述】:在我的产品模型不包含变体之前。现在... 查看详情