我有一个包含多个字段的类,其中两个是多对多字段:
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的两个列表描述?
答案 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.