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':,
      }