2017-05-17 19 views
1

私はDjangoプロジェクトに取り組んできました。 カスタムフォーム(フォームと呼ばれるクラス)を使用していますが、Restricted_Formというクラスがあります。自身が持っているフォーム 『:このクラスのポイントは、管理者ユーザーが(「スタッフステータス」利用者」)がDjango Admin- ForeignKeyフィールドの選択を制限する

#....models.py: 
from django.contrib.auth.models import User, Group 

class Restricted_Form(models.Model): 
    Form = models.ForeignKey('forms.Form') 
    Authorized_Users = models.ManyToManyField(User, blank=True) 
    Authorized_Groups = models.ManyToManyField(Group, blank=True) 
    user = models.ForeignKey(User, blank=True, null=True, related_name="restriction_owner") 

オプションは、ユーザーまたはグループは、フォーム/提出埋めフォームにアクセスすることができるかを制限している』ということです。

user = models.ForeignKey(User, blank=True, null=True) 
#this is always the user who created it 

私の問題は、非スーパーユーザ管理者は何ができるかを制限している。彼らは彼らだけが自分自身を作成し​​ているフォーム含むRestricted_Formオブジェクトを作成することができるはずです。実際には、彼らはRestricted_Formを作成するときに、彼ら自身が作成した "フォーム"のみouldは、ドロップダウンメニューで選択するオプションとして表示されます。 これが今の私の関連adminクラスです:

#...admin.py 
class RestrictedFormAdmin(admin.ModelAdmin): 
    fieldsets = [ 
    (None, {"fields": ("Form", "Authorized_Users", "Authorized_Groups")}),] 
    def save_model(self, request, obj, form, change): 
     if getattr(obj, 'user', None) is None: 
      obj.user = request.user 
     obj.save() 
    def get_queryset(self, request): 
     qs = super(RestrictedFormAdmin, self).get_queryset(request) 
     if request.user.is_superuser: 
      return qs 
     return qs.filter(user=request.user) 
    def has_change_permission(self, request, obj=None): 
     if not obj: 
      return True 
     return obj.user == request.user or request.user.is_superuser 

admin.site.register(Restricted_Form, RestrictedFormAdmin) 

ヘルプは非常に高く評価されます。

答えて

1

あなたはこのような何か試すことができます。

class RestrictedFormAdmin(admin.ModelAdmin): 
    def render_change_form(self, request, context, *args, **kwargs): 
     context['adminform'].form.fields['Form'].queryset = Form.objects.filter(user=request.user) 
     return super(RestrictedFormAdmin, self).render_change_form(request, context, args, kwargs)   
+0

一方、私はそこに)(それは、作業forms.ModelFormと別のクラスを作成し、フィルタを使用して取得しようとしてきたが、これは仕方クリーナー、それです作品!どうもありがとうございました :) –

関連する問題