5. Formulário e Campo Dinâmico¶
5.1. DynamicForm¶
Da mesma forma que o ModelForm não precisa adicionar manualmente cada atributo, usando o DynamicForm, você só precisa adicionar o nome do campo com um adicional que permite adicionar o “Nome Detalhado” à lista
Exemplo Simples
from django_api_client.forms import DynamicForm
...
class CompanyExampleForm(DynamicForm):
class Meta:
dynamic_fields = {
'name',
'brand',
'cnpj',
}
Advanced Example with custom fields and
label
name
from django_api_client.forms import DynamicForm
...
class CompanyExampleForm(DynamicForm):
phone = forms.CharField(max_length=15, label=_('Phone'))
cellphone = forms.CharField(max_length=20, label=_('Cellphone'))
email_contact = forms.EmailField(label=_('Contact Email'))
active = forms.BooleanField()
class Meta:
dynamic_fields = {
'name': _("Company Name"),
'brand': _("Brand"),
'cnpj': _("CNPJ"),
'phone': '',
'cellphone': '',
'email_contact': '',
'active': '',
}
Exemplo Avançado com validação
from django_api_client.forms import DynamicForm
# These imports are only show a real CNPJ validation
from django_stuff.utils import remove_special_characters
from django_stuff.validators import validate_cnpj
...
class CompanyExampleForm(DynamicForm):
class Meta:
dynamic_fields = {
'name': _("Company Name"),
'brand': _("Brand"),
'cnpj': _("CNPJ"),
}
def clean_cnpj(self):
value = remove_special_characters(self.cleaned_data['cnpj'])
if not validate_cnpj(value):
raise forms.ValidationError("CNPJ Invalid.")
return value
5.2. AjaxChoiceField¶
É o mesmo que o ChoiceField mas você pode pode popupar o choices usando ajax
direto do template e submeter o resultado
Exemplo
from django_api_client.fields import AjaxChoiceField
...
class TestForm(DynamicForm):
sub_category = AjaxChoiceField(label=_("Sub Category"), widget=forms.Select)
class Meta:
dynamic_fields = {
...
'sub_category':,
}