Проверить форму WTForm на основе нажатой кнопки

В моей форме есть две кнопки, которые я использую для отправки формы. Одна кнопка удаляет выбранные файлы (представленные в таблице, один флажок для объекта), а другая выбирает их для обработки.

Когда файлы выбираются при удалении, проверка не требуется (кроме проверки того, что был выбран хотя бы один файл). Однако для обработки мне нужно убедиться, что существует ровно один файл с определенным расширением.По сути, мне нужны разные процессы проверки, в зависимости от того, на какую кнопку нажал пользователь.

Как я могу лучше всего это сделать? Я знаю, что могу выполнить проверку в представлении, но я бы предпочел проверить это внутри формы, поскольку она чище.

Вот формы, о которых идет речь:

class ButtonWidget(object):
    """A widget to conveniently display buttons.
    """
    def __call__(self, field, **kwargs):
        if field.name is not None:
            kwargs.setdefault('name', field.name)
        if field.value is not None:
            kwargs.setdefault('value', field.value)
        kwargs.setdefault('type', "submit")
        return HTMLString('<button %s>%s</button>' % (
            html_params(**kwargs),
            escape(field._value())
            ))

class ButtonField(Field):
    """A field to conveniently use buttons in flask forms.
    """
    widget = ButtonWidget()

    def __init__(self, text=None, name=None, value=None, **kwargs):
        super(ButtonField, self).__init__(**kwargs)
        self.text = text
        self.value = value
        if name is not None:
            self.name = name

    def _value(self):
        return str(self.text)

class MultiCheckboxField(SelectMultipleField):
    """
    A multiple-select, except displays a list of checkboxes.

    Iterating the field will produce subfields, allowing custom rendering of
    the enclosed checkbox fields.
    """
    widget = ListWidget(prefix_label=False)
    option_widget = CheckboxInput()

class ProcessForm(Form, HiddenSubmitted):
    """
    Allows the user to select which objects should be
    processed/deleted/whatever.
    """

    PROCESS = "0"
    DELETE = "-1"

    files = MultiCheckboxField("Select", coerce=int, validators=[
        Required()
        ]) # This is the list of the files available for selection
    process_button = ButtonField("Process", name="action", value=PROCESS)
    delete_button = ButtonField("Delete",  name="action", value=DELETE)

    def validate_files(form, field):
        # How do I check which button was clicked here?
        pass

Ответы на вопрос(1)

Ваш ответ на вопрос