![](/img/trans.png)
[英]How to return a custom list of Model objects using Django REST Framework?
[英]How to list all objects from particular model in django rest framework?
我有兩個模型:
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']
您可以使用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']
我已經嘗試過 Sumithran 的解決方案,但我做了一個小的調整,而不是使用 serializers.HyperlinkedModelSerializer 我使用了 serializers.ModelSerializer 並且它顯示的產品如下查看
希望它能回答你正在尋找的東西:)
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__'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.