如何覆盖django API查询的结果
我对Django很陌生,所以这看起来很基本 我有两种型号:如何覆盖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查询时,我希望包括品牌名称匹配的结果,但
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
您可以使用视图类中的overrideget\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