如何在 django rest 框架中列出来自特定模型的所有对象?
Posted
技术标签:
【中文标题】如何在 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 框架中列出来自特定模型的所有对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django rest 框架中仅使用特定变体对象将项目添加到愿望清单?
如何在 React 中显示来自 django-rest-framework 的错误消息