2012-03-28 21 views
5

Làm cách nào để loại trừ các trường biểu mẫu nếu người dùng không phải là nhân viên? Tôi cố gắng này, nhưng đã không làm việc, đưa ra một lỗi:Django: Cách loại trừ trường biểu mẫu nếu người dùng là nhân viên?

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

Trả lời

3

Bạn cần phải vượt qua nó dụ người dùng từ yêu cầu của bạn - theo hình thức mô hình không có quyền truy cập vào nó.

my_form = PostForm(user=request.user)

Sau đó, trong __init__ của bạn:

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

Xin lỗi, tôi đã không nhận được nó, tôi đã thêm điều này "my_form = PostForm (user = request.user)" của tôi xem, và cố định các __init__ chức năng, nhưng một lỗi đã đưa ra, tôi sẽ chỉnh sửa câu hỏi của tôi ở đây để thêm nhiều dữ liệu! – Hamza

+0

Lỗi này xuất hiện: đối tượng 'NoneType' không có thuộc tính 'is_superuser' – Hamza

+0

Điều này có nghĩa là bạn không có người dùng đăng nhập đang hoạt động. –

11

này có thể đạt được trong mẫu khi vẽ biểu mẫu. Nó sẽ cần phải cho phép các giá trị null hoặc có một giá trị mặc định trong định nghĩa mô hình hay cách khác đã xác nhận nó ghi đè:

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

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

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

Tương tự như vậy bạn có thể kiểm tra is_superuser hoặc séc quyền, vui lòng xem tài liệu: https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions

Các vấn đề liên quan