2010-11-24 8 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(Q(conditions__user = user) | Q(conditions__user__isnull = True)).order_by("conditions__count") 

問題は、動作しません。 __isnull演算子がクエリにまったく影響しないかのように思えます(私はさまざまなバリエーションを試しました)。

SQLをハードコーディングせずにこれを達成する方法をご存知ですか?このクエリのSQLを書くことは簡単かもしれないが、私はSQLがかなり醜いことができるいくつかの他のクエリを持っている。

答えて

関連する問題