所以我试图过滤一个大型数据库,发现我需要一个复杂的WHERE子句来完成我需要的搜索。不幸的是,我的SQL知识非常缺乏,所以我希望有人能为我指明正确的方向。你知道吗
所以我已经想出了下面的方法。假设我有一个Django模型:
class ExampleModel(models.Model):
param_a = models.CharField(max_length = 50)
param_b = models.CharField(max_length = 50)
param_c = models.CharField(max_length = 50)
param_d = models.CharField(max_length = 50)
我想能够搜索,比如说,所有的示例模型谁的参数a等于“a”,参数b等于“b”或“b”,所以我发现我可以使用一个where搜索:
ExampleModel.objects.extra(where=["param_a='A'", "param_b='b' OR param_b='B'"])
这很好,正是我想要的。但假设我再加上一项:
class ManyToManyModel(models.Model):
name = models.CharField(max_length = 50)
并在ExampleModel中添加多对多关系:
class ExampleModel(models.Model):
param_a = models.CharField(max_length = 50)
param_b = models.CharField(max_length = 50)
param_c = models.CharField(max_length = 50)
param_d = models.CharField(max_length = 50)
param_e = models.ManyToManyField('ManyToManyModel', related_name = 'manytomanymodel_set')
是否有任何方法可以使用.extra(where=[])方法基于此参数进行查询?你知道吗
更新:
所以我意识到我几乎可以通过一个.filter操作来完成我想要的,但是我还有一个问题。你知道吗
假设我想找到所有示例模型,其中param\u e有一个名为“a”的ManyToManyModel,或一个名为“B”的ManyToManyModel,我可以使用:
ExampleModel.objects.filter(param_e__name__in = ['A', 'B'])
但有一件事我现在搞不清楚,那就是如何找到一个名为“A”和“B”的。例如,假设paramèe在manytomy字段中有四个manytomanymodel,它们的名称分别为“A”、“B”、“C”和“D”。搜索精确匹配很容易,但是找到所有包含“A”和“B”以及其他内容的ExampleModels,是否有相应的过滤器?我在Django的文档里找不到。你知道吗
嗯,有可能。。。你知道吗
然后:
你问它是干什么的?你知道吗
我选择先获取ids,因为我在组合过滤和注释时得到了错误的结果,所以必须检查一下。你知道吗
看看这里:https://docs.djangoproject.com/en/1.6/topics/db/queries/#complex-lookups-with-q-objects
在应用到queryset之前,可以使用逻辑操作(如OR和)组合这些Q对象。你知道吗
相关问题 更多 >
编程相关推荐