我目前想要建立一个自适应用户界面。为此,我记录了用户与系统交互时产生的某些操作(我称之为条件)。因此,例如,如果他在列表中选择供应商,则这将导致与用户相关联的条件,其中操作“选择供应商”并且供应商对象作为值。
为了实现这一点并保持通用,我使用了泛型关系。所以我的条件模型看起来像这样:
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可能会变得非常难看。