如何覆盖django API查询的结果

如何覆盖django API查询的结果,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,我对Django很陌生,所以这看起来很基本 我有两种型号: 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查询时,我希望包括品牌名称匹配的结果,但

我对Django很陌生,所以这看起来很基本

我有两种型号:

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为null的结果

如果Foo看起来像这样:

Foo.brand, Foo.foo_name
1, "apple"
3, "orange"
1, "mango"
null, "grape"
/api/foo?brand=1应返回苹果、芒果和葡萄。我怎么能得到这个?我试着阅读类似的问题,听起来我需要覆盖视图集,但不确定


谢谢。

您可以使用视图类中的override
get\u queryset
方法执行此操作,并使用
Q
操作符创建
条件。您需要在品牌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

您可以使用视图类中的override
get\u queryset
方法来执行此操作,并使用
Q
操作符来创建
条件。您需要在品牌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