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可能会变得非常难看。