【问题标题】:ModelViewset in djangodjango中的模型视图集
【发布时间】:2022-01-02 12:00:46
【问题描述】:

我是 Django Rest-framework 的新手。我使用 Modelviewset 为项目创建 API。我想获取不是通过 id 的事物列表,我使用 lookup_field 来做到这一点。但它只返回 1 个对象。如何自定义它以返回多个对象?

这是我的模特

class Rating(models.Model):
    dayandtime = models.DateTimeField(auto_now_add=True)
    ratingpoint = models.IntegerField(null=True,blank=True)
    ratingcomment = models.TextField(null=True, blank=True)
    img = models.ImageField(upload_to='static',default=None)
    product = models.ForeignKey(Product,on_delete=models.CASCADE)
    user = models.ForeignKey(User,on_delete=models.CASCADE)

这是我的看法

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer
    lookup_field = "product"

这是我的序列化器

class RatingSerializer(ModelSerializer):
    class Meta:
        model=Rating
        fields=["id","dayandtime","ratingpoint", "ratingcomment","img","product","user"]
        lookup_field = "product" 

请帮我解决这个问题。非常感谢

【问题讨论】:

    标签: django api django-models django-rest-framework django-views


    【解决方案1】:

    您想在 api 上使用过滤器并返回多个对象。但是lookup_field 用于执行单个模型实例的对象查找。 有很多方法可以实现你的目标,但我会告诉你filter by query parameters

    您可以覆盖get_queryset() 来处理http://yourdoamin.com/api/ratings?product=1 等URL(这里我们假设您要按产品ID 过滤)。

    class RatingViewSet(viewsets.ModelViewSet):
        serializer_class = RatingSerializer
    
        def get_queryset(self):
            queryset = Rating.objects.all()
            product= self.request.query_params.get('product')
            if product not None:
                queryset = queryset.filter(product_id=product)
            return queryset
    

    当然,你可以添加很多if/elif/else块来处理很多查询参数。

    你也可以使用类似的方法:The SearchFilter class来达到同样的目的。

    更多信息请关注DRF filtering documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多