我与Django和内置的管理界面进行试验。
我基本上是想有一个字段是一个下拉的管理界面。 下拉选择,应该是所有在指定的目录中可用的目录。
如果我这样定义一个字段:
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的不想用我的小部件,而是呈现默认的TextInput你当你使用一个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(选择= {一些名单})
它仍然会使默认的字符字段部件。 谁知道我做错了吗?