0

私は次のようなモデルを持っています:

class Action(models.Model): 
    def can_be_applied(self, user):
        #whatever
        return True

デフォルトの Manager をオーバーライドしたいと考えています。しかし、現在のユーザー変数をマネージャーに渡す方法がわからないため、次のようにスムーズに実行する必要があります。

 [act for act in Action.objects.all() if act.can_be_applied(current_user)]

マネージャーをオーバーライドするだけでそれを取り除くにはどうすればよいですか?

ありがとう。

4

2 に答える 2

2

マネージャーは単なるメソッドであるため、必要なものをそこに渡すことができます。

class ActionManager(models.Manager):
     def applied(self, user):
         return [x for x in self.get_query_set().all() if x.can_be_applied(user)]

Action.objects.applied(someuser)

非常に効率的ではありませんが、それは仕事をします。

于 2010-03-08T09:08:48.710 に答える
0

django.contrib.authこれは、http : //docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.get_all_permissionsで既に実装されているものとよく似ています。

たぶん、彼らがその機能をどのように実装したかを見てみることができますか?

于 2010-03-08T09:17:35.970 に答える