डीजेगो फॉर्मेट फॉर्म फॉर्म ऑब्जेक्ट्स के लिए फॉर्म निर्माण के सभी विवरणों को स्वयं ही प्रस्तुत करते हैं, और व्यक्तिगत रूप के उदाहरण दूसरों के बारे में अवगत नहीं हैं, इसलिए यह अप्रत्याशित नहीं है कि प्रत्येक को अपने विकल्पों के लिए पूछना होगा।
कैशिंग भी दुष्प्रभाव अनपेक्षित हो सकता था - उदाहरण के लिए, प्रपत्र के __init__
समारोह initial
डेटा इसे प्राप्त किया पर निर्भर हो सकता है, कैश की गई form
वस्तु गलत बना रही है।
सबसे अच्छा प्रश्नों की संख्या को कम करने के लिए एक बार चुनाव क्वेरीसमूहों निकालते हैं और फिर उनके निर्माता अपने फ़ॉर्म वर्गों के लिए उन्हें पारित करने के लिए किया जाएगा जिस तरह से। यह एक कस्टम ModelForm
और एक कस्टम ModelFormSet
को परिभाषित करने की आवश्यकता होगी।
आपका प्रपत्र एक निर्माता है कि विकल्प सीधे स्वीकार करता है की आवश्यकता होगी:
from django.forms.models import ModelForm
class MyForm(ModelForm):
def __init__(self, my_field_choices=None, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['my_field'].choices = my_field_choices
और अपने formset के रूप में वे का निर्माण कर रहे हैं क्वेरीसमूहों चलाने के लिए और उन्हें रूपों में पारित करने के लिए एक विधि ओवरराइड करने के लिए की आवश्यकता होगी:
from django.forms.models import BaseModelFormSet
class MyFormSet(BaseModelFormSet):
def _construct_forms(self):
# instantiate all the forms and put them in self.forms
self.forms = []
# Define each of your choices querysets
my_field_choices = Model.object.filter(...)
#Add your querysets to a dict to pass to the form
form_defaults = {'my_field_choices': my_field_choices, }
for i in xrange(min(self.total_form_count(), self.absolute_max)):
self.forms.append(self._construct_form(i, **form_defaults))
(the Django source कि यह कैसे काम करेगा इस पर गौर करने के लिए)
स्रोत
2013-03-06 15:30:55
django1.5 मॉडल स्मृति कैश है। – danihp
आप सही (https://docs.djangoproject.com/en/1.5/releases/1.5/#caching-of-related-model-instances) कर रहे हैं, लेकिन दुर्भाग्य से यह इस समस्या को प्रभावित नहीं करता। – jnns
मैंने इस समस्या को हल करने के लिए थोड़ा हैक बनाया है: http://stackoverflow.com/a/43105646/8450 –