9

ModelForm では、ユーザーのアクセス許可をテストして、正しいフィールドに入力できるようにする必要があります。

次のように定義されます。

class TitleForm(ModelForm):    
    def __init__(self, user, *args, **kwargs):
        super(TitleForm,self).__init__(*args, **kwargs)            
        choices = ['','----------------']
        # company
        if user.has_perm("myapp.perm_company"): 
            self.fields['company'] = forms.ModelChoiceField(widget=forms.HiddenInput(),
                queryset=Company.objects.all(), required=False) 
            choices.append(1,'Company')
        # association
        if user.has_perm("myapp.perm_association")
            self.fields['association'] =
            forms.ModelChoiceField(widget=forms.HiddenInput(),
                queryset=Association.objects.all(), required=False)
            choices.append(2,'Association')
        # choices
        self.fields['type_resource'] = forms.ChoiceField(choices = choices)

    class Meta:
        Model = Title  

このModelFormは仕事をします:私はテンプレートの各フィールドを非表示にし、javascriptのおかげでそれらを表示します...
問題は、このModelFormがモデルで定義された各フィールドがテンプレートに表示されることです。
必要がない場合は、フォームから削除したいと思います:
例: ユーザーがモデル会社に対する権限を持っていない場合、テンプレートのレンダリングされたフォームでは使用されません。

その問題は、フィールドまたは除外属性を含むフォームの Meta クラスにフィールドのリストを配置する必要があることですが、それらを動的に管理する方法がわかりません。

何か案が??
ご回答ありがとうございます。

4

1 に答える 1

14

self.fields dictから削除するだけです。

if not user.has_perm("blablabla"):
    del self.fields["company"]
于 2010-03-25T15:35:06.510 に答える