2012-01-23 5 views
1

私の質問は、明示的に設定されていない場合、デフォルトのパラメータを渡すためのモデルマネージャのメソッドをオーバーライドする方法ですか?私は(取得)およびフィルタ()メソッドは、パラメータdeleted=Falseを追加し、このパラメータが明示的に設定されていない場合(私はEntry.objects.filter(deleted=True)のようなもので意味のすべてにしたい何とか今get()またはfilter()メソッドのDjangoモデルのデフォルトパラメータ

class Entry(models.Model): 

    user = models.ForeignKey(User, verbose_name=_("user")) 
    text = models.CharField(max_length=200) 
    date = models.DateTimeField(auto_now_add=True) 
    deleted = models.BooleanField(default=False) 

は私がモデルのエントリを持っていると言います提示されたパラメータをオーバーライドしてはいけません)。

EntryManagerを作成し、Entryモデルのマネージャーとして設定します。 EntreManagerで フィルタ()メソッド:

def filter(self, *args, **kwargs): 
    deleted = kwargs.get('deleted', False) 
    kwargs.update({'deleted':deleted}) 
    return super(EntryManager, self).get(*args, **kwargs) 

しかし、それはケースdeleted__in=(True, False)のために動作しません、それは不思議ではないのですが、私はこの権利を行うにはどのような方法を知りません。 ありがとうございます。 ところで私はdjangoを使います。1.3.1

答えて

8

hereのように、マネージャのget_query_setメソッドを上書きする必要があります。私は明示的に設定したパラメータ、それはオーバーライドしないフィルタで= Trueの削除時に、私は「(.... WHERE取得クエリで、

def get_query_set(self): 
    return super(EntryManager, self).get_query_set().filter(deleted=False) 
+0

場合のために、この方法により行う:あなたのケースでは、あなたはこのような何かを行うことができます"deleted" = False AND "entry"。 "deleted" = True) – tony

+1

@tony:ジェネリックな 'objects'マネージャーと特殊なフィルタリングマネージャー(' deleted'またはsomesuch )。 – mipadi

+0

今、私はそれをありがとう! – tony

関連する問題