2016-07-04 3 views
1

私はdjango-guardianのドキュメントからユーザーガイドに従ってdjango-guardianを設定しました。これはグループが特定のクラスを見ることができるかどうかを制御する可能性を与えてくれました。これは(ジャンゴ・保護者のドキュメントの例から、他のコードと一緒に)私は、特定のユーザーおよびグループのアクセス許可を "与えることができますDjango-Guardian - クラスへのグループアクセスを制限する

class Task(models.Model): 
    summary = models.CharField(max_length=32) 
    content = models.TextField() 
    customer = models.CharField(max_length=80) 
    reported_by = models.ForeignKey(User) 
    created_at = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     permissions = (
      ('view_task', 'View task'), 
     ) 

:これが追加されたフィールドを持つジャンゴ・保護者のドキュメントからの例(顧客)でありますdjango管理者から「タスクの表示」を選択します。問題は、顧客が誰であるかに応じてどのタスクグループが見えるかを制限したいということです。例えば、顧客Aに割り当てられたコンサルタントのみがtask.customer = 'A'のタスクを見ることができます。それを設定する方法はありますか?

ご迷惑をおかけして申し訳ありません。

答えて

1

これは、ジャンゴガーディアンで簡単に達成できます。これは、あなたの代わりにもう少しコーディングする必要があります。管理チェンジのビューに戻りますレコードを制限するために、例えば

、:

from django.contrib import admin 
from myapp import models 
from guardian.shortcuts import get_objects_for_user 


@admin.register(models.Task) 
class TaskAdmin(admin.ModelAdmin): 
    # ... 
    def get_queryset(self, request): 
     qs = super(TaskAdmin, self).get_queryset(request) 
     tasks = get_objects_for_user(request.user, 'myapp.view_task', klass=models.Task) 
     return qs.filter(task_id__in=tasks.values_list('id')) 

Similaryを、あなたは、任意の通常のビューでこれを行うことができます。

+0

ありがとうございました。残念ながらエラーメッセージが表示されます: "AlreadyRegisteredを発生させる(モデル '%sはすでに登録されています'%model .__ name__) django.contrib.admin.sites.AlreadyRegistered:モデルタスクは既に登録されています。 – Wessi

+1

ようこそ。これは、その特定のモデルのModelAdminのどこかに登録したことを示しています。変更を修正するか、登録を解除する前に登録を解除する必要があります。しかしこれはまったく別の問題です。 – Wtower

+0

私は間違いを発見しました。私の悪い。ありがとう。 "FieldError at/admin/app/task/ キーワード 'task'をフィールドに解決できません。選択肢はsummary、content、customers、reported_by、created_at" – Wessi

関連する問題