django中的复杂查找

时间:2011-11-19 05:47:00

标签: django django-models many-to-many

我有一个包含多个字段的类,其中两个是多对多字段:

class someClass(models.Model):
    field1 = ...
    field2 = ...
    field3 = ...
    field4 = models.ManytoManyField(...)
    field5 = models.ManytoManyField(...)

我原本希望稍后使用someClass.objects.get(...)

someClass.objects.get(field1=..., field2=..., ...)

我还想限制field4和field5返回的someClass es。我假设我不能在.get()调用中执行此操作,因为这些代表了可以采用多种形式的多对多关系。

当我想要找到一个唯一的someClass时,我可以访问几个与field1-field3中表示的对象相对应的变量,以及两个对应的对象的短列表field4和field5中表示的对象。这些应该描述一个独特的实例。

接受我可能必须在一系列.filter()中执行此操作,我获取单个someClass对象的最佳方式是什么?我的数据(同样,field1的一个变量) -field3和field4和field5的两个列表描述?

1 个答案:

答案 0 :(得分:1)

我认为答案就像你期望的那样明显......

由于get s,您绝对无法使用m2m - 您必须链接过滤器以排除包含不精确的m2m匹配项的结果。

query = someClass.objects.filter(field1=field1, field2=field2, field3=field3)

for item in list1:
   query = query.filter(foo=item)

for item in list2:
   query = query.filter(bar=item)

# substitute with fancy python as you wish.