如何在 django rest 框架中列出来自特定模型的所有对象?

     2023-02-24     286

关键词:

【中文标题】如何在 django rest 框架中列出来自特定模型的所有对象?【英文标题】:How to list all objects from particular model in django rest framework? 【发布时间】:2022-01-21 22:42:24 【问题描述】:

我有两个模型

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(default=0, decimal_places=2, max_digits=10)

    def __str__(self):
        return self.name
class Receipt(models.Model):
    purchase_date = models.DateTimeField(auto_now=True, null=False)
    shop = models.ForeignKey(Shop, on_delete=models.SET_NULL, null=True)
    products = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return super().__str__()

我的收据网址如下所示:

我希望它显示所有产品的列表,而不是其中的数量。如何做到这一点?

我的观点集:

class ReceiptViewSet(viewsets.ModelViewSet):
    queryset = Receipt.objects.all()
    serializer_class = ReceiptSerializer
    permission_classes = [AllowAny]

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    permission_classes = [AllowAny]
    enter code here

序列化器:

class ProductSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'name', 'price']

class ReceiptSerializer(serializers.HyperlinkedModelSerializer):
    products = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        model = Receipt
        fields = ['id', 'purchase_date', 'shop', 'products']

【问题讨论】:

分享你的序列化器? 抱歉,我更新了我的问题并在那里添加了序列化程序 【参考方案1】:

我已经尝试过 Sumithran 的解决方案,但我做了一个小的调整,而不是使用 serializers.HyperlinkedModelSerializer 我使用了 serializers.ModelSerializer,它显示的产品如下View

希望它能回答您正在寻找的内容:)

from rest_framework import serializers

class ReciptSerializer(serializers.ModelSerializer):
    class Meta:
        model = Receipt
        fields = ['id', 'purchase_date', 'shop', 'products']
        depth = 1

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'

【讨论】:

答案中应包含更改。 谢谢你通知我,我更新了我的答案@mstgnz【参考方案2】:

您可以使用depth 选项简单地指定嵌套表示

试试这个

class ReceiptSerializer(serializers.HyperlinkedModelSerializer):
    ... 

    class Meta:
        model = Receipt
        fields = ['id', 'purchase_date', 'shop', 'products']
        depth = 1

否则

class ReceiptSerializer(serializers.HyperlinkedModelSerializer):
    products = ProductSerializer(many=True, read_only=True)
    ... 

    class Meta:
        model = Receipt
        fields = ['id', 'purchase_date', 'shop', 'products']

【讨论】:

我试过了,它告诉我:TypeError at /receipts/ 'Product' object is not iterable @santana011 删除many=True 再试一次,顺便说一句,我真的不明白你为什么用复数命名相关连接 @santana011 第一种方法怎么样? 它有效,但我不明白为什么收据只能有一种产品。每当我尝试向收据添加另一个产品时,它都会切换它们 Foreiginkey 只能有一个关系,在您的方案中,您可以实现多对多关系的反向外键。

如何在 django rest 框架中添加自定义权限和角色

】如何在djangorest框架中添加自定义权限和角色【英文标题】:howtoaddcustompermissionsandrolebasedindjangorestframework【发布时间】:2021-11-0120:23:27【问题描述】:models.py===============来自django.contrib.auth.models从django.db导入AbstractUser导入模型#C... 查看详情

如何在 React 中显示来自 django-rest-framework 的错误消息

】如何在React中显示来自django-rest-framework的错误消息【英文标题】:Howtodisplayerrormessagesfromdjango-rest-frameworkinReact【发布时间】:2019-12-2910:24:11【问题描述】:我正在尝试使用Django休息框架和反应,redux来实现用户注册表单。我能... 查看详情

Django rest框架将POST数据分配给特定用户

】Djangorest框架将POST数据分配给特定用户【英文标题】:DjangorestframeworkassignPOSTdatatospecificuser【发布时间】:2017-01-0211:37:45【问题描述】:一个月前启动了Django和DRF,但我被困在这部分...我从Android设备获得了一个JSON,其中已经包... 查看详情

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

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

如何在 django rest 框架中访问获取请求数据

】如何在djangorest框架中访问获取请求数据【英文标题】:Howtoaccessgetrequestdataindjangorestframework【发布时间】:2020-02-0101:22:59【问题描述】:如何在djangorest框架中访问GET请求数据。在文档中,他们提到“为了代码清晰,我们建议使... 查看详情

Django:项目使用来自 REST API 的数据,如何在这个系统中使用外部应用程序?

】Django:项目使用来自RESTAPI的数据,如何在这个系统中使用外部应用程序?【英文标题】:Django:ProjectconsumingdatafromRESTAPI,Howtouseexternalappsinthissystem?【发布时间】:2012-03-0413:47:45【问题描述】:我有一个DjangoWeb前端,它使用来自RE... 查看详情

如何在 Django Rest Framework 中为特定应用设置权限

】如何在DjangoRestFramework中为特定应用设置权限【英文标题】:HowsetpermissionforspecificappinDjangoRestFramework【发布时间】:2018-03-0122:09:15【问题描述】:我的Django项目中有两个REST应用程序:api-应该是AllowAny和ReadOnly!apicrm-应该是rest_fr... 查看详情

如何在 django rest 框架中定义列表字段?

】如何在djangorest框架中定义列表字段?【英文标题】:HowcanIdefinealistfieldindjangorestframework?【发布时间】:2013-06-2118:15:07【问题描述】:假设我有一堂课classTags(object):tags=[]def__init__(self,tags):self.tags=tags和一个自定义列表字段classTags... 查看详情

如何在 Django REST 框架中更改字段名称

】如何在DjangoREST框架中更改字段名称【英文标题】:HowtochangefieldnameinDjangoRESTFramework【发布时间】:2014-05-2209:21:44【问题描述】:我正在尝试更改DRF序列化程序中的模型字段名称,如SQL中的别名。我尝试了不同的方法,但都没有... 查看详情

如何在 django rest 框架 ModelSerializer 中覆盖模型字段验证

】如何在djangorest框架ModelSerializer中覆盖模型字段验证【英文标题】:HowtooverridemodelfieldvalidationindjangorestframeworkModelSerializer【发布时间】:2014-05-0306:30:29【问题描述】:我有以下型号:classUserProfile(models.Model):mobileNumber=models.BigInteg... 查看详情

如何在 django rest 框架中的嵌套序列化器相关对象上使用 prefetch_related?

】如何在djangorest框架中的嵌套序列化器相关对象上使用prefetch_related?【英文标题】:Howtouseprefetch_relatedonnestedserializerrelatedobjectsindjangorestframework?【发布时间】:2021-06-0615:15:48【问题描述】:从下面的模型中,我尝试在课程序列... 查看详情

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

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

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

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

如何在 Django rest 框架中捕获 Model.DoesNotExist 异常?

】如何在Djangorest框架中捕获Model.DoesNotExist异常?【英文标题】:HowtocapturetheModel.DoesNotExistexceptioninDjangorestframework?【发布时间】:2019-03-0515:26:15【问题描述】:在DjangoRESTFramework中,当您查询数据库模型并且它不存在时,将引发异... 查看详情

如何在单个帖子中更新多个实例 - django rest 框架

】如何在单个帖子中更新多个实例-djangorest框架【英文标题】:howtoupdateinasinglepostmultipleinstances-djangorestframework【发布时间】:2018-09-1522:22:15【问题描述】:我有数组对象:constordsend=[order:4,id:1,,order:2,id:2,]其中id是主键,对于axios... 查看详情

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

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

如何在 django rest 框架中验证 jwt 身份验证中的令牌

】如何在djangorest框架中验证jwt身份验证中的令牌【英文标题】:howtovalidatetokeninjwtauthenticationindjangorestframework【发布时间】:2021-10-2712:33:59【问题描述】:如何在SimpleJWT身份验证中验证JWT令牌。如果令牌访问令牌已过期,我需要... 查看详情

如何在 Django REST 框架中为多对多字段定义“IsOwner”自定义权限?

】如何在DjangoREST框架中为多对多字段定义“IsOwner”自定义权限?【英文标题】:Howtodefinea\'IsOwner\'custompermissionforamany-to-manyfieldinDjangorestframework?【发布时间】:2021-09-1914:15:53【问题描述】:我是Django的新手,尤其是Django-rest-framew... 查看详情