2011-08-22 14 views
11

मैं Django में मेरी पहली एप्लिकेशन लिख रहा हूँ, और मैं create_object जेनेरिक दृश्य के साथ एक समस्या है; मेरी urls.py में, मेरे पास है:विस्तार Django के सामान्य दृश्य

(r'^new$', CreateView.as_view()), 

समस्या यह है कि जब उपयोगकर्ता 'नई' प्रपत्र सबमिट करता, मैं डेटा है कि डेटाबेस में सहेजा जाएगा हेरफेर करने के लिए की जरूरत है (मैं वास्तव में user_id विदेशी जोड़ने की जरूरत कुंजी); मेरे विचार (नोटिस data.user=request.user) में

form = ClientForm(request.POST) 
    if form.is_valid(): 
     data = form.save(commit=False) 
     data.user = request.user 
     data.save() 
     form.save_m2m() 

: बिना जेनेरिक दृश्य मैं लिखने के लिए इस्तेमाल किया। मैं Django डॉक्स खोज की है, लेकिन मैं यह करने के लिए (शायद CreateView वर्ग का विस्तार करके) एक तरह से नहीं मिल सकता है - में बुक somewere वहाँ केवल एक उदाहरण है कि एक ListView वर्ग के get_object विधि एक last_accessed_date क्षेत्र अद्यतन करने के लिए ओवरराइड करता है है।

+0

यहाँ "अतिरिक्त काम प्रदर्शन" है, जहां वे बताता get_object विधि वर्ग का विस्तार करके अधिरोहित जा सकता है [कड़ी] (https://docs.djangoproject.com/en/dev/topics/class-based-views/#performing-extra-work) –

उत्तर

6

आप form_valid method ओवरराइड करना चाहते।

from django.views.generic import CreateView 

class CustomCreateView(CreateView): 
    def get_form(self, form_class): 
     form = super(CustomCreateView, self).get_form(form_class) 
     form.instance.user = self.request.user 
     return form 

संपादित:

20

आप get_form विधि अधिभावी करके ऐसा कर सकते आजकल मैं प्रति Issac Kelly's answer रूप form_valid ओवरराइड होगा:

from django.views.generic import CreateView 

class CustomCreateView(CreateView): 
    def form_valid(self, form): 
     form.instance.user = self.request.user 
     return super(CustomCreateView, self).form_valid(form) 
संबंधित मुद्दे