Подклассифицированная форма не отображает настраиваемое поле ввода в 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) может быть взято из контекста/базы данных и т.д., так что вы можете проверить, не совершил ли пользователь какие-либо махинации на фронтенде