2011-01-25 14 views
15

में डेटाबेस से डेटा के साथ एक Django फार्म आबाद मैं अपने forms.py में एक रूप है कि इस तरह दिखता है। जब HTML में उत्पन्न item_list होना चाहिए की तरह कुछ: मेरे चयन बयान मेंदृश्य

<select title="ItemList"> 
    <option value="1">Select Item 1</option> 
    <option value="2">Select Item 2</option> 
</select> 

विकल्प मान क्वेरी अक्सर नए परिणाम उत्पन्न बदल जाएगा में एक चर के बाद से लगभग हर समय बदल जाएगा।

मुझे डेटाबेस से मूल्यों के साथ ItemList को पॉप्युलेट करने के लिए view.py में और मेरी टेम्पलेट फ़ाइलों में भी क्या करने की आवश्यकता है?

उत्तर

25

Django दस्तावेज में इस उदाहरण पर एक नज़र डालें:

मूल रूप से, आप queryset कीवर्ड तर्क एक फील्ड वस्तु पर, अपने डेटाबेस से पंक्तियों हड़पने के लिए उपयोग कर सकते हैं:

class BookForm(forms.Form): 
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) 

अद्यतन

आप एक गतिशील मॉडल पसंद क्षेत्र की जरूरत है, तो आप फार्म के निर्माता में अपने आइटम आईडी को सौंपने और उसके अनुसार क्वेरीसमूह समायोजित कर सकते हैं:

class ItemForm(forms.Form): 

    # here we use a dummy `queryset`, because ModelChoiceField 
    # requires some queryset 
    item_field = forms.ModelChoiceField(queryset=Item.objects.none()) 

    def __init__(self, item_id): 
     super(ItemForm, self).__init__() 
     self.fields['item_field'].queryset = Item.objects.filter(id=item_id) 

पी.एस. मैंने इस कोड का परीक्षण नहीं किया है और मुझे आपके सटीक सेटअप के बारे में निश्चित नहीं है, लेकिन मुझे आशा है कि मुख्य विचार पूरा हो जाएगा।

संसाधन:

+0

समस्या यह है कि मेरे सारे तर्क forms.py में view.py में होता नहीं है। क्वेरीसेट इस आइटम की तरह दिखता है .objects.filter (item_id = id)। View.py में "आईडी" चर उत्पन्न होता है। – avatar

+0

यदि आप बुकफॉर्म कन्स्ट्रक्टर में कोई और पैरामीटर जोड़ते हैं तो क्या होगा? – amcashcow

+0

@itgorilla: मेरी पोस्ट अपडेट की गई। – miku

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