Формы Django - есть ли способ динамически редактировать FilePathField? - PullRequest
0 голосов
/ 04 января 2019

У меня есть форма django, которую я использую для доступа к каталогу. Однако я хотел бы получить доступ к двум различным каталогам на основе заданного ввода, но иметь один FilePathField.

В качестве примера - у меня есть две панели - «панель1» и «панель2». Каталог, к которому я хотел бы получить доступ, является каталогом анализа каждой из этих панелей как таковой:

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

В каждом из этих каталогов анализа есть каталоги, начинающиеся с "Experiment", которые я хотел бы, чтобы пользователь мог выбрать для получения некоторых результатов.

У меня есть форма:

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. Есть ли способ динамически изменить этот аргумент пути, возможно, с помощью поля выбора?

1 Ответ

0 голосов
/ 04 января 2019

Один из способов сделать это - передать путь в качестве аргумента методу __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__

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...