2012-01-07 16 views
5

मैं प्लेलिस्ट और उसके आइटम प्राप्त करने के लिए मॉडलफॉर्म का उपयोग कर रहा हूं। इसमें लॉगिन स्क्रिप्ट भी शामिल है। मैं वर्तमान में उपयोगकर्ता मॉडल में लॉग इन उपयोगकर्ता को सेट करने की कोशिश कर रहा हूं।मॉडलफॉर्म में मूल्य त्रुटि

def playlistview(request): 
    if request.method == 'POST': 
     form = playlistform(request.POST) 
     if form.is_valid(): 
       data = form.save(commit=False) 
       data.user = request.user 
       data.save() 
       return render_to_response('playlist.html', {'data': data}) 
    else: 
     form = playlistform() 
     return render_to_response('playlist.html', {'form': form, 'user': request.user}, context_instance=RequestContext(request)) 

Playlist.html फ़ाइल:

https://gist.github.com/1576136

त्रुटि पेज आप से पहले How to avoid this dropdown combo box?

class playlistmodel(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.title 

class itemsmodel(models.Model): 
    playlist = models.ForeignKey(playlistmodel) 
    item = models.TextField() 

    def __unicode(self): 
     return self.item 

class playlistform(ModelForm): 
    class Meta: 
     model = playlistmodel 
     exclude = {'user'} 

class itemsform(ModelForm): 
    class Meta: 
     model = itemsmodel 
     exclude = {'playlist'} 

यहाँ इस बात मैं पोस्ट किया है देख सकते हैं प्लेलिस्ट दृश्य है:

https://gist.github.com/1576186

लेकिन मैं ValueError हो रही है:

Exception Type: ValueError Exception Value: Cannot assign "<django.utils.functional.SimpleLazyObject object at 0x7f0234028f50>": "playlistmodel.user" must be a "User" instance 

Traceback: Local vars --- data.user = request.user 

यहाँ मेरी settings.py https://gist.github.com/1575856

धन्यवाद है।

+1

बस अगर आपके पास है, तो सत्यापित करें कि आपके पास सेटिंग [TEMPLATE_CONTEXT_PROCESSORS] (https://docs.djangoproject.com/en/1.3/ref/settings/#template-context-processors) है, जो आपके 'settings.py' –

+0

में है आप Django का संस्करण उपयोग कर रहे हैं? 'डेटा आज़माएं।user_id = request.user.id' इसके बजाए। – Alasdair

+0

@ सीज़र मैंने अपने प्रश्न अनुभाग पर settings.py के लिए लिंक पोस्ट किया है। – rnk

उत्तर

0

मुश्किल बताने के लिए है, लेकिन मैं अपने playlistview में यह कोशिश करेंगे:

form = playlistform(request, request.POST, instance=playlistmodel) 

हो सकता है आप पिछले पैरामीटर (उदाहरण = playlistmodel) ommit सकता है, क्योंकि यह केवल जरूरत में हो सकता है अगर आप किसी मौजूदा ऑब्जेक्ट को बदलने

आशा इस मदद करता है ...

+0

उपर्युक्त वाक्यविन्यास काम नहीं करता है। यह विशेषता त्रुटि दिखा रहा है। धन्यवाद। – rnk

+0

दुख :(, मैं बस इतना कह सकता हूं कि यह वाक्यविन्यास एक समान परिस्थिति में मेरे लिए काम करता है। – Jingo

0

मैं बहुत ही समस्या है, लेकिन यह केवल उठता है जब कोई उपयोगकर्ता (एक AnonymousUser उदाहरण उम्मीद) में लॉग होता है। कम से कम जब मेरे सुपरसुर लॉग इन है, मुझे कोई समस्या नहीं मिली।

के बावजूद मैं नहीं मिला है एक समाधान अभी तक, शायद आप एक सुराग इस answer

खैर में मिल जाएगा, अब मुझे एहसास हुआ है कि मेरे मामले में AnonymousUser DB में अशक्त के रूप में संग्रहित किया जाना चाहिए, लेकिन छोड़ सुराग लिंक पोस्ट करने के लिए यह उत्तर (टिप्पणियां छोड़ने के लिए अभी तक कोई अनुमति नहीं है)।

उम्मीद है कि यह मदद करता है!

5

मुझे पता है कि यह पोस्ट पुराना है, लेकिन अगर कोई भी एक ही समस्या के साथ यहां आता है, तो जवाब यह है कि request.user वास्तव में django के auth.user के लिए एक रैपर है। तो request.user एक SimpleLazyObject है, और इसका उद्देश्य अनावश्यक तत्कालता से बच रहा है, और एक सरल उपयोगकर्ता कैशिंग तंत्र को भी लागू कर रहा है। वास्तविक उपयोगकर्ता का उपयोग करने के (और यह दृष्टांत, जब पहली बार एक्सेस करने वाले), तुम क्या करने की जरूरत:

auth.get_user(request)

यह आपको auth.user का एक उदाहरण दे देंगे। यदि आपको अंदर क्या हो रहा है, इस बारे में अधिक जानकारी चाहिए, तो this post देखें।

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