Django प्रपत्र फ़ील्ड में डिफ़ॉल्ट रूप से रिक्त क्वेरीसेट बनाएं


169

मेरे पास इस फ़ील्ड के रूप में हैं:

city = forms.ModelChoiceField(label="city", queryset=MyCity.objects.all())
district = forms.ModelChoiceField(label="district", queryset=MyDistrict.objects.all())
area = forms.ModelChoiceField(label="area", queryset=MyArea.objects.all())

जिला शहर पर क्लिक से आता है और क्षेत्र क्लिक पर क्षेत्र से आता है। के साथ queryset=MyDistrict.objects.all()और queryset=MyArea.objects.all()फार्म बहुत भारी हो जाएगा। मैं डिफ़ॉल्ट रूप से क्वेरी कैसे खाली कर सकता हूं?


मेरा सुझाव दिया संपादित करें पोस्ट में सुधार करता है। सामान्य तौर पर, किसी भी पोस्ट को "धन्यवाद" के साथ समाप्त नहीं होना चाहिए। यह व्यक्तिगत नहीं है, कली। meta.stackexchange.com/questions/17878/…
तेलियर

जवाबों:


422

ऐसा करने से आपके पास खाली क्वेरीसेट हो सकती है:

MyModel.objects.none()

हालाँकि मुझे नहीं पता कि आप उस फ़ॉर्म का उपयोग कैसे करने जा रहे हैं, आप अपनी फ़ील्ड की क्वेरी के रूप में डाल सकते हैं ताकि आपको जो चाहिए वह मिल सके ...

आप अधिक जानकारी यहाँ पा सकते हैं


4
यूआरएल मापदंडों के आधार पर आपके विचार में आपके क्वेरीसेट में परिवर्तन के उपयोग के मामले में। फिर आपके विचार में आप सही क्वेरी सेट करते हैं जैसे: edit_form.fields ["परिसंपत्ति"]। क्वेरीसेट = Asset.objects.filter (स्थान_आईडी = स्थान_आईडी)
रेडिटेक

क्या होगा अगर मेरे पास एक मॉडल नहीं है, मैं सिर्फ एक मॉडल बना रहा हूं values_list('something', flat=True)?
बोरिस

2

@ रेडटेक की टिप्पणी का उत्तर होना चाहिए क्योंकि यह समान परिदृश्यों में उपयोगी है लेकिन स्वीकृत उत्तर की तुलना में भिन्न दृष्टिकोण के साथ है।

अगर आपके विचार में url के साथ आपका क्वेरीसेट बदलता है।

मैं उदाहरण के साथ उत्तर का विस्तार कर रहा हूं जैसा कि मैंने इस्तेमाल किया:

def my_view(request):
    ...
    form = YourForm(initial={'field1':value1, 'field2':value2})
    form.fields['field3'].queryset = YourModel.objects.filter('foo'=bar)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.