Django表单-有没有办法动态编辑FilePathField?

时间:2019-01-04 16:02:25

标签: django forms

我有一个用于访问目录的django表单。但是,我想基于给定的输入访问两个不同的目录,但是有一个FilePathField。

作为一个例子-我有两个面板-'panel1'和'panel2'。我要访问的目录是每个面板的分析目录,如下所示:

/path/destination/panel1/analysis/
/path/destination/panel2/analysis/

在每个分析目录中,都有以“实验”开头的目录,我希望用户可以选择这些目录以获取一些结果。

我有我的表格:

class RunUploadForm(forms.Form):

    directory_path = forms.FilePathField(
            path='/path/destination/panel1/analysis',
            required=True,
            allow_folders=True,
            allow_files=False,
            recursive=True,
            match="Experiment*",
            label="Pick folder for results:"
        )


    class Meta:
        fields = ('directory_path',)

这仅允许用户访问panel1目录,因为它已硬编码到路径arg中。有没有一种方法可以动态更改此路径参数,也许可以使用choicefield?

1 个答案:

答案 0 :(得分:0)

一种方法是将路径作为参数传递给表单的__init__方法,例如:

class RunUploadForm(forms.Form):

    directory_path = forms.FilePathField(
            path='/path/destination/panel1/analysis',
            required=True,
            allow_folders=True,
            allow_files=False,
            recursive=True,
            match="Experiment*",
            label="Pick folder for results:"
        )


    class Meta:
        fields = ('directory_path',)

    def __init__(self, *args, **kwargs):
        path = kwargs.pop('path', 'somedefaultvalue')
        super().__init__(*args, **kwargs)
        self.fields['directory_path'] = forms.FilePathField(
            path=path,
            required=True,
            allow_folders=True,
            allow_files=False,
            recursive=True,
            match="Experiment*",
            label="Pick folder for results:"
        )

您需要创建FilePathField的新实例,因为此类字段的选择是在__init__上生成的