我正在試驗Django和內置的管理界面。django model/modelForm - 如何在choiceField中獲得動態選擇?
我基本上想要在管理界面中有一個下拉字段。下拉選項應該是指定目錄中所有可用的目錄。
如果我定義一個字段是這樣的:
test_folder_list = models.FilePathField(path=/some/file/path)
它顯示了我所有的目錄中的文件,但不是目錄。
有誰知道我該如何顯示文件夾?
還我試圖做
test_folder_list = models.charField(max_length=100, choices=SOME_LIST)
其中SOME_LIST是一個列表我填充使用一些自定義代碼來讀取一個目錄中的文件夾。這有效,但不刷新。即選擇列表僅限於第一次運行應用程序時的任何內容的快照。
在此先感謝。
更新:
經過一番思考和研究我發現了什麼,我想可能是要麼
創建基於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時得到的默認textinput。
爲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