Django/Rest框架: how to get data from model that has on foreign key in it

标签 django django-rest-framework

我有两个模型

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/

相关文章:

javascript - 将 HTML 表单组合到数据表 ajax 请求

python - 如何从 django 管理界面更改 django 中的模型名称?

python - 在 Django Rest Framework 自定义异常处理程序响应数据中包含请求数据

python - Django 'WSGIRequest' 对象没有属性 'Post'

django - 创建 django webapp + REST API 端点

python - django rest framework - 向后序列化以避免 prefetch_related

Django 自定义用户密码未进行哈希处理

python - Django - 从时间戳中获取不同的日期

javascript - 如何在 django 模板中创建多个折叠功能

python - 使用 mongodb (mongoengine) 和 redis 测试 django