मैं django और बिल्टिन व्यवस्थापक इंटरफेस के साथ प्रयोग कर रहा हूँ।django मॉडल/मॉडलफॉर्म - पसंद फ़ील्ड में गतिशील विकल्प कैसे प्राप्त करें?
मैं मूल रूप से एक ऐसा क्षेत्र बनाना चाहता हूं जो व्यवस्थापक UI में एक ड्रॉप डाउन हो। ड्रॉप डाउन विकल्प एक निर्दिष्ट निर्देशिका में उपलब्ध सभी निर्देशिका होनी चाहिए।
तो मैं इस तरह की एक क्षेत्र को परिभाषित:
test_folder_list = models.FilePathField(path=/some/file/path)
यह मेरे सभी फ़ाइलें निर्देशिका में, लेकिन नहीं निर्देशिका को दर्शाता है।
क्या कोई जानता है कि मैं फ़ोल्डरों को कैसे प्रदर्शित कर सकता हूं?
भी मैं
test_folder_list = models.charField(max_length=100, choices=SOME_LIST)
जहां SOME_LIST एक सूची मैं एक निर्देशिका में फ़ोल्डरों को पढ़ने के लिए कुछ कस्टम कोड का उपयोग कर पॉप्युलेट है कर की कोशिश की। यह काम करता है लेकिन यह रीफ्रेश नहीं करता है। यानी विकल्प सूची पहली बार ऐप चलाने के दौरान जो भी था वहां स्नैपशॉट तक ही सीमित है।
अग्रिम धन्यवाद।
अद्यतन:
कुछ सोच और अनुसंधान के बाद मैं क्या मैं करने के लिए या तो
1. मेरे अपने विजेट कि forms.ChoiceField
या
2 पर आधारित है बनाने के हो सकता है चाहता हूँ की खोज की। जब इसके लिए 1. मैं करने की कोशिश की ग्राहक
को प्रदान की गई है पसंद सूची में फ़ोल्डरों की सूची को पारित एक कस्टम विजेट। अपने मॉडल लगता है कि
class Test1(models.Model):
test_folder_ddl = models.CharField(max_length=100)
तो यह मेरा कस्टम विजेट है:
class FolderListDropDown(forms.Select):
def __init__(self, attrs=None, target_path):
target_folder = '/some/file/path'
dir_contents = os.listdir(target_folder)
directories = []
for item in dir_contents:
if os.path.isdir(''.join((target_folder,item,))):
directories.append((item, item),)
folder_list = tuple(directories)
super(FolderListDropDown, self).__init__(attrs=attrs, choices=folder_list)
तो मैं अपने modelForm
class test1Form(ModelForm):
test_folder_ddl = forms.CharField(widget=FolderListDropDown())
में ऐसा किया है और यह work.What नहीं लगता था मेरा मतलब है कि django मेरे विजेट का उपयोग नहीं करना चाहता था और इसके बजाय जब आप CharField का उपयोग करते हैं तो आपको डिफ़ॉल्ट टेक्स्टिनपुट प्रदान किया जाता है।
2. के लिए मैं अपने ModelForm में यह करने की कोशिश की
class test1Form(ModelForm):
test_folder_ddl = forms.CharField(widget=FolderListDropDown())
test_folder_ddl.choices = {some list}
मैं भी वर्ग test1Form (ModelForm) की कोशिश की: test_folder_ddl = forms.ChoiceField (विकल्प = {कुछ सूची})
और यह अभी भी डिफ़ॉल्ट चार फ़ील्ड विजेट प्रस्तुत करेगा। कोई भी जानता है कि मैं क्या गलत कर रहा हूं?
बहुत बढ़िया, आप बहुत बहुत धन्यवाद, यह भी Django 1.10 पर काम करता है। – Moritz