2012-03-28 60 views
5

如果用戶不是工作人員,如何排除表單域?我試過,但沒有工作,給了一個錯誤:Django:如果用戶是員工,如何排除表單域?

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)) 

回答

3

您需要從您的要求傳遞給它的用戶實例 - 雛型無法訪問它。

my_form = PostForm(user=request.user)

然後,在你__init__

def __init__(self, *args, **kwargs): 
    published = kwargs.pop('published', None) 
    user = kwargs.pop('user', None) 
    super(PostForm, self).__init__(*args, **kwargs) 
    if not user.is_staff: 
     del self.fields['published'] 
+0

對不起,我沒有得到它,我添加了這個「my_form = PostForm(user = request.user)」我的看法,並修復了__init__函數,但另一個錯誤出現了,我將在這裏編輯我的問題來添加更多的數據! – Hamza 2012-03-28 08:46:06

+0

出現此錯誤:'NoneType'對象沒有屬性'is_superuser' – Hamza 2012-03-28 08:54:04

+0

這意味着您沒有活動的登錄用戶。 – 2012-03-28 08:57:26

11

這可以在模板中渲染的形式時可以實現。這將需要允許空值,或在模型定義有一個默認值,或替換地具有其驗證覆蓋:

<form method="post">{% csrf_token %} 
    {% if request.user.is_staff %} 
    <p>{{ form.published }}</p> 
    {% endif %} 

    <p>{{ form.author }}</p> 

    <!-- ... your other fields --> 
</form> 

同樣可以檢查is_superuser或檢查權限,請參閱文檔:https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions

相關問題