私の質問は、明示的に設定されていない場合、デフォルトのパラメータを渡すためのモデルマネージャのメソッドをオーバーライドする方法ですか?私は(取得)およびフィルタ()メソッドは、パラメータ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
場合のために、この方法により行う:あなたのケースでは、あなたはこのような何かを行うことができます"deleted" = False AND "entry"。 "deleted" = True) – tony
@tony:ジェネリックな 'objects'マネージャーと特殊なフィルタリングマネージャー(' deleted'またはsomesuch )。 – mipadi
今、私はそれをありがとう! – tony