現在、私は適応型ユーザーインターフェイスを構築したいと考えています。そのために、ユーザーがシステムとやりとりをするときに、ユーザーが作成する特定のアクション(条件と呼ぶ)を記録します。たとえば、リスト内でサプライヤを選択すると、ユーザに関連付けられた条件が発生し、アクション「サプライヤを選択」およびサプライヤオブジェクトが値として返されます。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(Q(conditions__user = user) | Q(conditions__user__isnull = True)).order_by("conditions__count")
問題は、動作しません。 __isnull
演算子がクエリにまったく影響しないかのように思えます(私はさまざまなバリエーションを試しました)。
SQLをハードコーディングせずにこれを達成する方法をご存知ですか?このクエリのSQLを書くことは簡単かもしれないが、私はSQLがかなり醜いことができるいくつかの他のクエリを持っている。