【问题标题】:How do I override the results from an django API query如何覆盖 django API 查询的结果
【发布时间】:2020-05-22 00:09:37
【问题描述】:

我对 Django 很陌生,所以这可能看起来很基础。

我有 2 个模型:

class Brand(models.Model):
    brand_name = models.CharField()

class Foo(models.Model):
    brand = models.ForeignKey(Brand, null=True)
    foo_name = models.CharField()

Foo.brand 可以为空。现在,当对 Foo 进行 API 查询时,我想包含品牌名称匹配的结果,以及 Foo.brand 为空的结果

如果 Foo 看起来像这样:

Foo.brand, Foo.foo_name
1, "apple"
3, "orange"
1, "mango"
null, "grape"

/api/foo?brand=1 应该返回苹果、芒果和葡萄。我怎样才能得到这个?我尝试阅读类似的问题,听起来我需要覆盖视图集,但不确定。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您可以在视图类中重写 get_queryset 方法并使用 Q 运算符创建 or 条件。您需要品牌 id 等于或为空的条件:

     def get_queryset(self):
        foos = Foo.objects.all()
        brand_id = self.request.query_params.get('brand')
        if brand_id:
            foos = Foo.objects.filter(Q(brand_id__isnull=True)|Q(brand_id=brand_id))
        return foos
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2012-09-03
      相关资源
      最近更新 更多