2009-09-04 7 views
0

私はFooの名前のようなモデルを持っています。私はエントリの日付フィールドを使用して2日以上経過したFooエントリの編集/削除を許可しませんが、スーパーユーザは何の制限もなく編集することができます。 これをどうすれば実現できますか? おかげの制限管理モデルのエントリ

答えて

5

上書きModelAdminの者queryset and has_change_permission

from django.contrib.admin import ModelAdmin 

class FooAdmin(ModelAdmin): 
    def has_change_permission(self, request, obj): 
     return obj is None or self.queryset(request).filter(pk=obj.pk).count() > 0 

    def queryset(self, request): 
     query = super(FooAdmin, self).queryset(request) 
     if request.user.is_superuser: 
      return query 
     else: 
      from datetime import datetime, timedelta 

      return query.filter(entry__gt=datetime.now()-timedelta(days=2)) 

admin.site.register(Foo, FooAdmin) 

has_change_permissionは、変更ビューで使用され、リストビューでクエリセットされます。私はDRYを維持するためにオーバーライドされたhas_change_permissionの中のクエリーセットを再利用します(変更パーミッションチェックでこのロジックを追加することなくクエリーセットに追加のフィルタを追加できます)が、追加のクエリが必要です。

+0

スニペットのおかげで、あなたは私を救った:)! – Hellnar

+1

django 1.6+でメソッドが 'get_queryset'に名前変更されました –

関連する問題