मैं इस तरह एक Django my_forms.py है:लेज़ी विकल्पों
class CarSearchForm(forms.Form):
# lots of fields like this
bodystyle = forms.ChoiceField(choices=bodystyle_choices())
प्रत्येक विकल्प उदा है ("सैलून", "सैलून (15 कारें)")। तो विकल्पों को इस समारोह द्वारा गणना की जाती है।
def bodystyle_choices():
return [(bodystyle.bodystyle_name, '%s (%s cars)' %
(bodystyle.bodystyle_name, bodystyle.car_set.count()))
for bodystyle in Bodystyle.objects.all()]
मेरी समस्या यह है कि हर बार जब मैं केवल my_forms.py आयात करता हूं तो विकल्प कार्य निष्पादित होते जा रहे हैं। मुझे लगता है कि यह जिस तरह से Django अपने खेतों की घोषणा करता है: कक्षा में लेकिन कक्षा विधि में नहीं। जो ठीक है लेकिन मेरे views.py my_forms.py आयात करता है, इसलिए प्रत्येक लुकअप पर विकल्प लुकअप किए जाते हैं चाहे कोई भी दृश्य उपयोग न हो।
मैंने सोचा था कि शायद कोई ब्रैकेट काम करेगा के साथ विकल्प = bodystyle_choices डाल, लेकिन मैं मिलता है:
'function' object is not iterable
जाहिर है मैं कैशिंग का उपयोग करें और "आयात my_forms" सिर्फ आवश्यक दृश्य कार्यों में डाल सकता है, लेकिन जो ऐसा नहीं करता मुख्य बिंदु बदलें: मेरे विकल्पों को आलसी होना चाहिए!
निश्चित रूप से बेहतर समाधान, यह स्वीकार्य उत्तर आईएमओ होना चाहिए। –
/सहमत है कि अब तक मैंने देखा है कि सबसे साफ समाधान है और यह आपको ModelChoiceField से एक महत्वपूर्ण अंतर मान्यताओं के साथ समस्याओं को छोड़ने देता है। – Hassek
यह कम से कम Django 1.6 के साथ काम नहीं करता है, क्योंकि 'ChoiceField._set_choices'' self._choices = self.widget.choices = list (value) ' – spookylukey