Django: Same form multiple times in one view -


मेरे पास तीन मॉडल उपयोगकर्ता (django.contrib.auth), स्क्रीनिंग < / कोड> और User_Screening User_Screening अतिरिक्त फ़ील्ड स्थिति के साथ एक एम 2 एम तालिका है।

  #design.contrib से django.db आयात मॉडल से # models.py .auth.models आयात उपयोगकर्ता वर्ग स्क्रीनिंग (models.Model): title = models.CharField (max_length = 255) start = models.DateTimeField () user_relation = models.ManyToManyField (उपयोगकर्ता, रिक्त = सच, के माध्यम से = 'User_Status') वर्ग User_Status (models.Model): एटीटीडिंग = 'सी' NOT_ATTENDING = 'n' प्रोजेक्शन = 'पी' STATUS_CHOICES = ((उपस्थिति, 'उपस्थित'), (NOT_ATTENDING, 'उपस्थित नहीं'), (प्रोजेक्टिंग, 'प्रोजेक्टिंग'), ) स्क्रीनिंग = मॉडल्स। फ़िरेंसकी (स्क्रीनिंग) उपयोगकर्ता = मॉडल। फ़ॉरइन्गकी (यूज़र) स्टेटस = मॉडेल्स। सीरफिल्ड (अधिकतम_ लैंग = 1, विकल्प = स्टेटस_चेओइकस)  

अब मैं एक दृश्य बनाना चाहता हूं, जो सभी आगामी स्क्रीनिंग दिखाता है अब तक, बहुत आसान है:

  # views.py @login_required () डीईफ़ इंडेक्स (अनुरोध): current_screenings = स्क्रीनिंग.ओबैजेस .फिल्टर (start__gte = timezone.now ()) संदर्भ = {'  

इस दृश्य में लॉग इन करने वाले उपयोगकर्ताओं को अपने स्थिति को अपडेट करने के लिए सक्षम होना चाहिए screenings ': current_screenings} return_screenings return (request,' schedule / index.html ', context) / कोड> ( User_Screening तालिका से)। यह भी हो सकता है, कि इस स्क्रीनिंग के लिए उपयोगकर्ता के पास अभी तक एक रिकॉर्ड नहीं है, इसलिए किसी को भी बनाया जाना चाहिए।

मुझे समझ में नहीं आता कि मैं प्रत्येक स्क्रीनिंग के लिए एक फॉर्म ड्रॉपडाउन फ़ील्ड कैसे संग्रह कर सकता हूं, जहां उपयोगकर्ता अपनी स्थिति का चयन कर सकता है। (या तो ? यदि कोई भी स्थिति सेट नहीं है, उपस्थित होकर , उपस्थित नहीं हो या प्रोजेक्शन )

< पी> मैं समझता हूं कि मुझे कई रूपों की आवश्यकता है, जो जानते हैं कि किस स्क्रीनिंग से वे संबंधित हैं।

इसके अलावा, ऐसा नहीं लगता है, क्योंकि मैं हमेशा शुरुआती डेटा के साथ एक फॉर्म नहीं भर सकता कुछ या सभी स्क्रीनिंग के लिए अनुपलब्ध रिकॉर्ड हो सकता है इसके अलावा मैं नहीं जानूंगा, किस रूप में स्क्रीनिंग ऑब्जेक्ट के अंतर्गत आता है।

अपडेट: मैं HTML के साथ समाप्त करना चाहता हूं, ऐसा कुछ है:

 <कोड> & lt; प्रपत्र & gt; & Lt; h1 & gt; वर्तमान स्क्रीनिंग 1 & lt; / h1 & gt; & Lt; select onchange = "submit ()" नाम = "स्क्रीनिंग_युजर" id = "s1" & gt; & Lt; विकल्प मान = "एट" & gt; उपस्थित & lt; / विकल्प & gt; & Lt; विकल्प मान = "not_att" & gt; उपस्थित नहीं है & lt; / विकल्प & gt; & Lt; विकल्प चयनित = "चयनित" value = "pro" & gt; प्रोजेक्शन & lt; / option & gt; & Lt; / चयन & gt; & Lt; h1 & gt; वर्तमान स्क्रीनिंग 2 & lt; / h1 & gt; & Lt; select onchange = "submit ()" नाम = "स्क्रीनिंग_युजर" id = "s2" & gt; & Lt;! - 'कृपया चयन करें' विकल्प केवल दृश्यमान है, अगर इस स्क्रीनिंग के लिए 'User_Screening' में उपयोगकर्ता का कोई संबंध नहीं है - & gt; & Lt; विकल्प चयनित = "चयनित" मान = "कोई नहीं" & gt; कृपया चुनें & lt; / option & gt; & Lt; विकल्प मान = "एट" & gt; उपस्थित & lt; / विकल्प & gt; & Lt; विकल्प मान = "not_att" & gt; उपस्थित नहीं है & lt; / विकल्प & gt; & Lt; विकल्प मान = "समर्थक" & gt; प्रोजेक्शन & lt; / option & gt; & Lt; / चयन & gt; & Lt;! - अधिक स्क्रीनिंग - & gt; & Lt; h1 & gt; वर्तमान स्क्रीनिंग n & lt; / h1 & gt; & Lt;! - स्क्रीनिंग के लिए चयन करें - & gt; & Lt; / प्रपत्र & gt;  

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

यदि एक स्क्रीनिंग में उपयोगकर्ता के लिए एम 2 एम रिश्ते हैं, तो उपस्थित उपयोगकर्ताओं की तुलना में उस सूची में हो सकता है। अगर इसमें शामिल न हो ... ठीक है, वे भाग नहीं ले रहे हैं! क्या यह समझ में आता है?

  वर्ग स्क्रीनिंग (models.Model): शीर्षक = मॉडल.कारफिल्ड (अधिकतम_लांबी = 255) तिथि = मॉडल.डेटाइमफिल्ड () = मॉडल में शामिल हो रहे हैं। कई मायामीफिल्ड (उपयोगकर्ता)   

फ़ॉर्म:

  वर्ग स्क्रीनिंगफॉर्म (मॉडलफॉर्म): कक्षा मेटा: मॉडल = स्क्रीनिंग फ़ाइड्स = ['उपस्थित',]  
< P> formset:

  स्क्रीनिंगफॉर्मसेट = मॉडलफोर्मेटसेटटैक्टर (स्क्रीनआईग, अधिकतम_एन्यूम = 1) formset = स्क्रीनिंगफ़ॉर्मसेट (स्क्रीनिंग = स्क्रीनिंग.बोजेस.फिल्टर (date__gte = अब))  
< / div>

Comments