Подклассифицированная форма не отображает настраиваемое поле ввода в Django

У меня есть подклассифицированная форма, в которой я хочу отобразить пользовательский атрибут max на поле ввода. Однако она не возвращает ни одного экземпляра формы в представлении и, следовательно, не отображает ни одного поля ввода:

# views.py
..
        custom_max_attribute = qs_aggregates['total_equity']
        print(custom_max_attribute) # prints 4000

        withdraw_form = WithdrawForm(custom_max_attribute)
        print(withdraw_form) # prints nothing
..
# template

..
<div class="field-wrapper">
    <div class="field-title">Set your Amount</div>
    <div class="withdraw-input-field">{{ withdraw_form.withdraw_amount }}</div> <!-- isnt rendered -->
</div>
..
# forms.py

class WithdrawForm(forms.Form):
    """
    A form to withdraw available funds from Farena to the users bank account
    """
    def __init__(self, custom_max_attribute, *args, **kwargs):

        super().__init__(self, custom_max_attribute, *args, **kwargs)

        withdraw_amount = forms.FloatField(widget=forms.NumberInput(attrs={'min': 1, 'max': custom_max_attribute, 'step': 0.01}))

Это обходной путь, работает для меня, но я вижу, что вы работаете со снятием средств, поэтому вам может понадобиться внедрение дополнительной валидации при отправке формы.

В принципе. Вы можете установить пользовательские атрибуты в JS, добавьте класс к вводу в forms.py следующим образом

widgets ={
   'name'    :forms.TextInput(attrs={'class':'shippForm'}),
   'withdraw':forms.NumberInput(attrs={'class':'shippForm'}),
}

и тогда вы можете просто

    var form_fields = document.getElementsByClassName('shippForm')
    form_fields[0].placeholder='{% trans "Name"  %}';
    form_fields[1].max='2115';

максимальное значение (2115) может быть взято из контекста/базы данных и т.д., так что вы можете проверить, не совершил ли пользователь какие-либо махинации на фронтенде

Вернуться на верх