2011-04-14 10 views
13

मैं एक संवाद बनाने की कोशिश कर रहा हूं जो एक rendered django रूप में slurp करने के लिए jquery's .load() फ़ंक्शन का उपयोग करता है। .load फ़ंक्शन को "अलर्ट" ऑब्जेक्ट का पीके पास किया जाता है। इसके अलावा वर्ग कार्यों में उपलब्ध कर रहे हैं self.request.user तरह बातें तो मैं संदेश मॉडल (models.py) में नीचे दिखाया गया है उन क्षेत्रों, पूर्व भर सकते हैं:प्रारंभिक डेटा के साथ django के जेनेरिक CreateView को उपclass कैसे करें?

class Message(models.Model): 

    user = models.ForeignKey(User) 
    alert = models.ForeignKey(Alert) 
    date = models.DateTimeField() 
    message = models.TextField() 

उपवर्गीकरण Django के CreateView यह बहुत आसान एक उत्पन्न करने के लिए बनाता है ModelForm (views.py) का एक उदाहरण के साथ संदर्भ:

class MessageDialogView(CreateView): 
    """ show html form fragment """ 
    model = Message 
    template_name = "message.html" 

    def get_initial(self): 
     super(MessageDialogView, self).get_initial() 
     alert = Alert.objects.get(pk=self.request.POST.get("alert_id")) 
     user = self.request.user 
     self.initial = {"alert":alert.id, "user":user.id, "message":"test"} 
     return self.initial 


    def post(self, request, *args, **kwargs): 
     super(MessageDialogView, self).post(request, *args, **kwargs) 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     context = self.get_context_data(form=form) 
     return self.render_to_response(context) 

समस्या है कि यहाँ self.initial फार्म के साथ गाया नहीं प्राप्त करता है। मैंने बीमा किया है कि फॉर्म वास्तव में get_initial पर कॉल कर रहा है और फॉर्म इंस्टेंस में post में उचित प्रारंभिक डेटा है, लेकिन जब फॉर्म टेम्पलेट message.html में प्रस्तुत किया जाता है तो यह प्रारंभिक डेटा को किसी भी तरह से नहीं लेता है जैसा कि मैं उम्मीद करता हूं। क्या यह काम करने के लिए एक विशेष चाल है? मैंने दस्तावेज़ों को खराब कर दिया है (जेनेरिक आधारित वर्ग दृश्यों पर उदाहरणों की कमी है) और स्रोत लेकिन मैं नहीं देख सकता कि मैं क्या खो रहा हूं।

उत्तर

19

get_initial() सिर्फ एक शब्दकोश वापस करना चाहिए, self.initial सेटिंग के साथ परेशान नहीं होना चाहिए।

आपका विधि कुछ इस तरह दिखना चाहिए:

def get_initial(self): 
    # Get the initial dictionary from the superclass method 
    initial = super(YourView, self).get_initial() 
    # Copy the dictionary so we don't accidentally change a mutable dict 
    initial = initial.copy() 
    initial['user'] = self.request.user.pk 
     # etc... 
    return initial 
+1

मेरी अज्ञानता को क्षमा करें लेकिन शब्दकोश को कॉपी न करने का जोखिम क्या है? – Harry

+0

इस कोशिश @HarryGordon: dict1 = { 'एक': 1, 'बी': 2} dict2 = dict1 dict2 [ 'बी'] = 10 प्रिंट (dict1) –

+0

सभी नई-पंक्तियों की तरह दिखता है खो गए हैं :( –

0

(संपादित, क्योंकि जो तुम कोशिश कर रहे हैं वास्तव में काम करता है)

मैं कल ही समस्या में पड़ गए, लेकिन अब यह काम कर रहा है – मुझे लगता है कि मैं get_initial में एक निर्देश के बजाय एक वस्तु वापस कर रहा था।

अपनी समस्या ठीक करने के संदर्भ में, मैं का एक छोटा संदिग्ध आप लग कितना में post() – आप डिफ़ॉल्ट (गैर overrided) post() साथ यह कोशिश कर सकते कर रही करने के लिए कर रहा हूँ?

self.get_form_kwargs के मूल्य की जांच करने के लिए आप initial सेट कर रहे हैं, तो आप pdb (या प्रिंट स्टेटमेंट) का भी उपयोग कर सकते हैं।

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