2010-11-24 92 views
2

我当前想要构建一个自适应用户界面。为此,我记录了用户在与系统进行交互时产生的某些操作(我称之为条件)。因此,例如,如果他选择列表中的供应商,则会导致与用户关联的条件,其中“选择供应商”行为和供应商对象为价值。Django泛型关系字段查找

为了实现这一点并保持通用,我使用了通用关系。所以,我的病情模式是这样的:

class Condition(models.Model): 
    action = models.CharField(max_length=50) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    value = generic.GenericForeignKey('content_type', 'object_id') 
    user = models.ForeignKey("User") 
    count= models.IntegerField(default = 0) 

坚持上述这里的例子是我的供应商模式:

class Supplier(CatalogueItem): 

    conditions = generic.GenericRelation(Condition) 

我现在要实现的是由计数查询所有的供应商,并责令其他们的状况,由当前用户生成。我现在要做的是类似

Supplier.objects.filter(conditions__user = user).order_by("conditions__count") 

问题是,这样所有从未被选中的供应商都不包括在结果中。所以我现在尝试的是:

Supplier.objects.filter(Q(conditions__user = user) | Q(conditions__user__isnull = True)).order_by("conditions__count") 

问题是,它不起作用。看起来好像__isnull运算符根本不影响查询(我尝试过各种变化)。

你知道有什么方法可以实现这一点,而不需要硬编码SQL吗?因为为这个查询编写SQL可能很简单,但是我还有其他一些查询是SQL可能会变得非常难看。

回答