【发布时间】:2010-11-24 15:13:58
【问题描述】:
我目前想建立一个自适应用户界面。为此,我记录用户在与系统交互时产生的某些操作(我称之为条件)。因此,例如,如果他在列表中选择了一个供应商,这将导致与用户相关联的条件,其中操作“选择供应商”和供应商对象作为值。
为了做到这一点并保持其通用性,我利用了通用关系。所以我的条件模型是这样的:
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 会变得非常丑陋。
【问题讨论】:
标签: sql django django-models