我有四个班级:
class A(models.Model):
field1 = models.BooleanField(default = True)
class Meta:
abstract = True
class B(models.Model):
field2 = models.BooleanField(default = True)
sites = models.ManyToManyField(Site)
class Meta:
abstract = True
class C(A,B):
field3 = models.BooleanField(default = True)
class Meta:
abstract = True
和
class D(C):
field4 = models.BooleanField(default = True)
只有D类在我的应用中的models.py中。其他是从不同的文件导入。 classess A anb B的领域正在许多模型中使用。我创建了D类,因为我想拥有Django的通用管理面板。
但是,如果我使用此代码:
obj = D()
model_class = obj.__class__
items = model_class.objects.filter(sites__id__exac=1)
我收到错误:
Join on field 'id' not permitted. Did you misspell 'exac' for the lookup type?
为什么?
答案 0 :(得分:1)
你错过了几封信:
https://docs.djangoproject.com/en/1.3/ref/models/querysets/#exact
更重要的是,您不需要在ID字段上执行__exact,只需:
items = model_class.objects.filter(sites__id=1)
或
items = model_class.objects.filter(sites__id__in=[1])
答案 1 :(得分:0)
这应该有效:
D.objects.filter(sites__in=Site.objects.filter(id__in=[1,]))