W ModelForm, muszę przetestować uprawnienia użytkownika, aby pozwolić im wypełnienie odpowiednich pól:wyjmowanie pól z dynamicznym ModelForm
jest zdefiniowany następująco:
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
Ten ModelForm działa : ukrywam każde pole w szablonie i powoduje, że pojawiają się dzięki javascript ...
Problem polega na tym, że każde pole zdefiniowane w modelu będzie wyświetlane na szablonie.
Chciałbym je usunąć z formularza, jeśli nie są potrzebne:
Przykład: jeśli użytkownik nie ma prawa do modelu firmy, nie będzie go używał w renderowanym formularzu w szablonie.
Problem to trzeba umieścić listę pól w Meta klasy postaci z pól lub wyklucza atrybut, ale nie wiem, jak zarządzać ich dynamicznie.
Każdy pomysł?
Dzięki z góry za jakąkolwiek odpowiedź.
Tak, to było oczywiste !!!! Wystarczy zdefiniować wszystkie pola w klasie Meta, a następnie usunąć, jeśli nie przydatne ... Wielkie dzięki! –
to nie zadziała, jeśli masz zestaw pól określony na przykład w ModelAdmin. –