我有两个模型
class Shops(models.Model):
shopkeeper = models.ForeignKey(Shopkeeper, on_delete=models.CASCADE)
name = models.CharField(max_length=250)
category = models.CharField(max_length=250)
contactNumber = models.IntegerField()
address = models.CharField(max_length=500)
dateCreated = models.DateTimeField(auto_now_add=True)
和
class Product(models.Model):
productsubcategory = models.ForeignKey(ProductSubCategory, on_delete=models.CASCADE)
shop = models.ForeignKey(Shops, on_delete=models.CASCADE)
title = models.CharField(max_length=250)
price = models.IntegerField()
image = models.FileField(null=True)
detail = models.TextField()
quantity = models.IntegerField()
dateCreated = models.DateTimeField(auto_now_add=True)
我为产品模型制作了序列化器类。我想编写一个 View ,它应该返回特定商店的产品。我的观点如下,
class ShopkeeperProductAPIView(generics.GenericAPIView):
def get(self,request,shop_id):
products = Product.objects.get(shop=shop_id)
products_serializer = ProductSerializer(products, many=True)
return Response(products_serializer.data)
我的网址如下,
path('shops/products/<int:shop_id>', views.ShopkeeperProductAPIView.as_view())
请帮帮我。
最佳答案
您不能使用:
products = Product.objects.get(shop=shop_id)
它只会返回一种产品,因为您使用了 get()
方法。您必须在序列化器中使用 filter()
和 many=True
。
所以代码将如下所示:
class ShopkeeperProductAPIView(generics.GenericAPIView):
def get(self,request,shop_id):
products = Product.objects.filter(shop=shop_id)
products_serializer = ProductSerializer(products, many=True)
return Response(products_serializer.data)
关于Django/Rest框架: how to get data from model that has on foreign key in it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50201144/