Pular para conteúdo

Forms

Classes de Formulários

O NetBox fornece várias classes formulário base para serem utilizadas pelos plugins.

Classes de Formulários Propósito
NetBoxModelForm Criar/editar objetos individuais
NetBoxModelImportForm Importar objetos de dados CSV em grupo
NetBoxModelBulkEditForm Editar múltiplos objetos simultaneamente
NetBoxModelFilterSetForm Filtrar objetos dentro da visualização de lista

NetBoxModelForm

É o formulário base para criar e editar modelos do NetBox. Ele extende o ModelForm do Django para adicionar suporte às tags e campos customizados.

Atributo Descrição
fieldsets Uma tuple de tuplas duplas definindo o layout do formulário (opcional)

Exemplo

from dcim.models import Site
from netbox.forms import NetBoxModelForm
from utilities.forms.fields import CommentField, DynamicModelChoiceField
from .models import MyModel

class MyModelForm(NetBoxModelForm):
    site = DynamicModelChoiceField(
        queryset=Site.objects.all()
    )
    comments = CommentField()
    fieldsets = (
        ('Model Stuff', ('name', 'status', 'site', 'tags')),
        ('Tenancy', ('tenant_group', 'tenant')),
    )

    class Meta:
        model = MyModel
        fields = ('name', 'status', 'site', 'comments', 'tags')

Tip

Se o seu formulário tem o campo comments, não há necessário de listá-lo; sempre irá aparecer por último na página.

NetBoxModelImportForm

Esse formulário facilita a importação em grupo de novos objetos do CSV, JSON ou dados em YAML. Como é com os formulários dos modelos, você vai precisar declarar uma subclasse Meta especificando o model e fields associados. NetBox também fornece vários campos disponíveis para sempre importados em tipos diferentes de CSV, listados abaixo:

Exemplo

from dcim.models import Site
from netbox.forms import NetBoxModelImportForm
from utilities.forms import CSVModelChoiceField
from .models import MyModel


class MyModelImportForm(NetBoxModelImportForm):
    site = CSVModelChoiceField(
        queryset=Site.objects.all(),
        to_field_name='name',
        help_text='Assigned site'
    )

    class Meta:
        model = MyModel
        fields = ('name', 'status', 'site', 'comments')

Note

A classe do formulário foi previamente nomeada de NetBoxModelCSVForm. Foi renomeada para na versão v3.4 do NetBox para suportar os formatos JSON e YAML em adição ao CSV. A classe NetBoxModelCSVForm foi mantida para compatibilidade com versões anteriores e funções iguais a NetBoxModelImportForm. No entanto, autores de plugins devem estar cientes que compatibilidade com versões anterior serão removidas na versão v3.5. do NetBox.

NetBoxModelBulkEditForm

Esse formulário (form) facilita a edição de múltiplos objetos em grupo (bulk). Diferente do modelo do formulário, esse formulário não tem uma classe filha chamada de Meta, e deve explicitamente definir cada campo. Todos os campos os campos dentro de um grupo de edição são geralmente declarados com required=False.

This form facilitates editing multiple objects in bulk. Unlike a model form, this form does not have a child Meta class, and must explicitly define each field. All fields in a bulk edit form are generally declared with required=False.

Atributo Descrição
model O medelo do objeto sendo editado
fieldsets Uma tupla de tuplas duplas definindo o layout do formulário (opcional)
nullable_fields Uma tupla de campos que podem ser anulados (definidos como empty) usando a edição de formulários em grupo (opcional)

Exemplo

from django import forms
from dcim.models import Site
from netbox.forms import NetBoxModelImportForm
from utilities.forms import CommentField, DynamicModelChoiceField
from .models import MyModel, MyModelStatusChoices


class MyModelEditForm(NetBoxModelImportForm):
    name = forms.CharField(
        required=False
    )
    status = forms.ChoiceField(
        choices=MyModelStatusChoices,
        required=False
    )
    site = DynamicModelChoiceField(
        queryset=Site.objects.all(),
        required=False
    )
    comments = CommentField()

    model = MyModel
    fieldsets = (
        ('Model Stuff', ('name', 'status', 'site')),
    )
    nullable_fields = ('site', 'comments')

NetBoxModelFilterSetForm

A classe do formulário é utilizada para renderizar o formulário para expressamente filtrar a lista de objetos. Os campos devem corresponder aos filtros definidos no grupo de filtros do modelo.

Atributo Descrição
model O modelo do objeto sendo editado
fieldsets Uma tupla de tuplas dupla definindo o layout do formulário (opcional)

Exemplo

from dcim.models import Site
from netbox.forms import NetBoxModelFilterSetForm
from utilities.forms import DynamicModelMultipleChoiceField, MultipleChoiceField
from .models import MyModel, MyModelStatusChoices

class MyModelFilterForm(NetBoxModelFilterSetForm):
    site_id = DynamicModelMultipleChoiceField(
        queryset=Site.objects.all(),
        required=False
    )
    status = MultipleChoiceField(
        choices=MyModelStatusChoices,
        required=False
    )

    model = MyModel

Campos com Própositos Gerais

Em adição ao campos de formulário definidos pelo Django, o NetBox fornece diferentes classes de campos para uso dentro do formulário para lidar com tipos de dados específicos. Eles podem ser importados de utilities.forms.fields e são documentados abaixo.

::: utilities.forms.ColorField options: members: false

::: utilities.forms.CommentField options: members: false

::: utilities.forms.JSONField options: members: false

::: utilities.forms.MACAddressField options: members: false

::: utilities.forms.SlugField options: members: false

Campos de Escolha (Choice Field)

::: utilities.forms.ChoiceField options: members: false

::: utilities.forms.MultipleChoiceField options: members: false

Campos Dinâmicos de um Objeto

::: utilities.forms.DynamicModelChoiceField options: members: false

::: utilities.forms.DynamicModelMultipleChoiceField options: members: false

Tipos de Campos de Conteúdo

::: utilities.forms.ContentTypeChoiceField options: members: false

::: utilities.forms.ContentTypeMultipleChoiceField options: members: false

Campos de Importação de CSV

::: utilities.forms.CSVChoiceField options: members: false

::: utilities.forms.CSVMultipleChoiceField options: members: false

::: utilities.forms.CSVModelChoiceField options: members: false

::: utilities.forms.CSVContentTypeField options: members: false

::: utilities.forms.CSVMultipleContentTypeField options: members: false