簡體   English   中英

如何在 django rest 框架中列出來自特定 model 的所有對象?

[英]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__()

我的收據 url 看起來像這樣: 在此處輸入圖像描述

我希望它顯示所有產品的列表,而不是其中的一些。 這個怎么做?

我的觀點:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM