2012-03-28 12 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

+0

यह त्रुटि आई: 'noneType' ऑब्जेक्ट में कोई विशेषता नहीं है 'is_superuser' – Hamza

+0

इसका मतलब है कि आपके पास उपयोगकर्ता में सक्रिय लॉग इन नहीं है। –

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

संबंधित मुद्दे