我正在试验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