【发布时间】:2018-04-20 14:26:31
【问题描述】:
在Django 中过滤对象的最佳方法是什么?
就我而言,我需要通过GET request 发送的不同参数过滤对象。因此,在我的get_queryset 或CBV 中,我将值发送到我的自定义models.QuerySet 的自定义函数并检索结果:
return MyModel.objects.all().custom_filter(param1, param2, param3)
但在我的自定义函数中,最令人怀疑的事情发生了。
- 首先,我检查传递的值是否存在并清理它们。
-
然后,对于每个参数,我分别使用
Q Objects过滤查询集。在自定义models.QuerySet中,它看起来像:def custom_filter(self, param1, param2, param3): # cleaning and checking staff # ... then result = self.filter(Q() | Q()) # related to param1 if (param2 != None): result = result.filter(Q()) # related to param2 if (param3 != None): result = result.filter(Q() & Q()) # related to param3 # and etc. return result.distinct()
这在那个时候工作得很好。但我认为这绝对是低效。如果有人有更好的解决方案,请提供。
【问题讨论】:
标签: python django filtering django-queryset