7

मैं अपने मॉडलमैं कैसे अनुरोध डेटा

from myproject.app.forms import PersonForm 
class PersonMixin(object): 
    model = Person 
    form_class = PersontForm 

class PersonCreateView(PersonMixin, CreateView): 
    pass 

यह मेरा कस्टम फार्म के साथ व्यक्ति का कोई दृश्य बनाते प्रदर्शित करने के लिए पूरी तरह से काम करता है के लिए Django के सामान्य createview इस्तेमाल किया के साथ एक Django वर्ग आधारित सामान्य createview पर प्रारंभिक डेटा सेट करते हैं। हालांकि, मेरे पास इस रूप में एक फ़ील्ड है कि मैं एक मूल्य के साथ पूर्व-जनसंख्या बनाना चाहता हूं। मुझे यह जवाब मिला: Set initial value to modelform in class based generic views

हालांकि, मेरा पूर्व-जनसंख्या मूल्य request.user के प्रोफ़ाइल से आता है। मैं PersonCreateView में अनुरोध का उपयोग कैसे करूं और फ़ॉर्म में पास करूं?

उत्तर

30

किसी भी वर्ग विधियों में आप self.request का उपयोग कर अनुरोध तक पहुंच सकते हैं। तो आपकी उपयोगकर्ता प्रोफ़ाइल self.request.user के साथ पहुंच योग्य होगी।

आपके द्वारा प्रदान किए गए लिंक पर बिल्डिंग आप मूल्य निर्धारित करने के लिए अपने get_initial विधि में self.request.user का उपयोग करने में सक्षम होंगे।

यानी।

def get_initial(self): 
    return { 'value1': self.request.user } 
3

सबसे पहले, आपको वहां एक मिश्रण का उपयोग करने की आवश्यकता नहीं है। PersonCreateView में बस form_class निर्दिष्ट करें; मॉडल की आवश्यकता नहीं है, क्योंकि आप इसे पहले से ही form_class में निर्दिष्ट कर रहे हैं (माना जाता है कि ModelForm का सबक्लास है)।

अनुरोध के बारे में कहां से प्राप्त करें, कक्षा आधारित विचार इसे ऑब्जेक्ट में सहेजते हैं, ताकि आप get_initial या get_form_kwargs के अंदर self.request.user कर सकें।

+0

मैं वास्तव में अन्य जेनेरिक विचारों में इस व्यक्तिमिक्सिन का उपयोग करता हूं, यही कारण है कि यह अलग हो गया है, लेकिन मैं सलाह की सराहना करता हूं और मुझे नहीं पता था कि मैं मॉडल से गुजर सकता हूं क्योंकि मैं form_class निर्दिष्ट कर रहा हूं। – rsp

+0

हां, मैंने पाया कि पोस्ट करने के बाद, लेकिन फिर भी मैं मिक्सिन का उपयोग करने के खिलाफ सलाह दूंगा, जब तक कि पूरी तरह से जरूरी न हो (वर्ग आधारित विचारों के साथ उन्हें आवश्यकता नहीं है, लेकिन यदि यह केवल दो विशेषता परिभाषाओं का पुन: उपयोग करना है तो यह नहीं है इसके लायक)। –

+0

आप ऐसा क्यों कहते हैं? मैंने डाउनसाइड के बावजूद कभी ज्यादा नहीं दिया लेकिन शायद मुझे कुछ याद आ रहा है? – rsp

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