如何列出 django rest 框架中特定模型的所有对象?
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 显示的产品如下 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__'
我有两个模型:
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 显示的产品如下 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__'