当我使用过滤器时,Django出错(sites__id__exac = ...)

时间:2011-07-04 09:46:23

标签: django django-models

我有四个班级:

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?

为什么?

2 个答案:

答案 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,]))