Django : Comment exclure du champ de formulaire si l'utilisateur est personnel?
Comment exclure des champs de formulaire si l'utilisateur n'est pas personnel ? J'ai essayé cela, mais ne fonctionne pas , donne une erreur :
global name 'user' is not defined
class PostForm(ModelForm):
class Meta:
model = Photo
exclude = ['author','featured','published']
def __init__(self, *args, **kwargs):
published = kwargs.pop('published', None)
super(PostForm, self).__init__(*args, **kwargs)
if not user.is_staff:
del self.fields['published']
view.py
def addpost(request):
if request.method == 'POST':
form = PostForm(request.POST,request.FILES,user=request.user)
if form.is_valid():
post = form.save(False)
post.author = request.user
form.save()
return HttpResponseRedirect(reverse('insight.content.views.index', ))
else:
form = PostForm(user=request.user)
ispost = True
return render_to_response('form_add_place.html', {'form': form,'ispost':ispost},context_instance=RequestContext(request))
Vous devez vous connecter pour publier un commentaire.
Ceci peut être réalisé dans le modèle lors du rendu de la forme. Il faudra autoriser les valeurs null ou ont une valeur par défaut dans la définition du modèle ou, sinon, d'avoir sa validation remplacée:
De la même façon, vous pouvez vérifier pour
is_superuser
ou vérifier les autorisations, voir les docs: https://docs.djangoproject.com/en/dev/topics/auth/default/#permissionsVous avez besoin de la passer à l'instance d'utilisateur à partir de votre demande, - le modèle de formulaire n'a pas accès à elle.
my_form = PostForm(user=request.user)
Puis, dans votre
__init__
: