Формы
Классы форм
InfraVision предоставляет несколько базовых классов форм для использования плагинами.
| Класс формы | Назначение |
|---|---|
NetBoxModelForm |
Создание/редактирование отдельных объектов |
NetBoxModelImportForm |
Массовый импорт объектов из CSV-данных |
NetBoxModelBulkEditForm |
Одновременное редактирование нескольких объектов |
NetBoxModelFilterSetForm |
Фильтрация объектов в представлении списка |
NetBoxModelForm
Это базовая форма для создания и редактирования моделей InfraVision. Она расширяет ModelForm Django для добавления поддержки тегов и пользовательских полей.
| Атрибут | Описание |
|---|---|
fieldsets |
Кортеж экземпляров FieldSet, которые контролируют отображение полей формы (опционально) |
Пример
from django.utils.translation import gettext_lazy as _
from dcim.models import Site
from netbox.forms import NetBoxModelForm
from utilities.forms.fields import CommentField, DynamicModelChoiceField
from utilities.forms.rendering import FieldSet
from .models import MyModel
class MyModelForm(NetBoxModelForm):
site = DynamicModelChoiceField(
queryset=Site.objects.all()
)
comments = CommentField()
fieldsets = (
FieldSet('name', 'status', 'site', 'tags', name=_('Model Stuff')),
FieldSet('tenant_group', 'tenant', name=_('Tenancy')),
)
class Meta:
model = MyModel
fields = ('name', 'status', 'site', 'comments', 'tags')
Поля комментариев
Если ваша форма имеет поле comments, его не нужно указывать; оно всегда появится последним на странице.
NetBoxModelImportForm
Эта форма облегчает массовый импорт новых объектов из данных CSV, JSON или YAML. Как и в формах моделей, вам нужно будет объявить подкласс Meta, указывающий связанную model и fields. InfraVision также предоставляет несколько полей формы, подходящих для импорта различных типов CSV-данных, перечисленных ниже.
Пример
from django.utils.translation import gettext_lazy as _
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')
NetBoxModelBulkEditForm
Эта форма облегчает массовое редактирование нескольких объектов. В отличие от формы модели, эта форма не имеет дочернего класса Meta и должна явно определять каждое поле. Все поля в форме массового редактирования обычно объявляются с required=False.
| Атрибут | Описание |
|---|---|
model |
Модель редактируемого объекта |
fieldsets |
Кортеж экземпляров FieldSet, которые контролируют отображение полей формы (опционально) |
nullable_fields |
Кортеж полей, которые могут быть обнулены (установлены в пустое значение) через форму массового редактирования (опционально) |
Пример
from django import forms
from django.utils.translation import gettext_lazy as _
from dcim.models import Site
from netbox.forms import NetBoxModelBulkEditForm
from utilities.forms import CommentField, DynamicModelChoiceField
from utilities.forms.rendering import FieldSet
from .models import MyModel, MyModelStatusChoices
class MyModelBulkEditForm(NetBoxModelBulkEditForm):
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 = (
FieldSet('name', 'status', 'site', name=_('Model Stuff')),
)
nullable_fields = ('site', 'comments')
NetBoxModelFilterSetForm
Этот класс формы используется для отрисовки формы, специально предназначенной для фильтрации списка объектов. Его поля должны соответствовать фильтрам, определённым в наборе фильтров модели.
| Атрибут | Описание |
|---|---|
model |
Модель редактируемого объекта |
fieldsets |
Кортеж экземпляров FieldSet, которые контролируют отображение полей формы (опционально) |
Пример
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
Поля общего назначения
В дополнение к полям формы, предоставляемым Django, InfraVision предоставляет несколько классов полей для использования в формах для обработки конкретных типов данных. Они могут быть импортированы из utilities.forms.fields и документированы ниже.
::: utilities.forms.fields.ColorField options: members: false
::: utilities.forms.fields.CommentField options: members: false
::: utilities.forms.fields.JSONField options: members: false
::: utilities.forms.fields.MACAddressField options: members: false
::: utilities.forms.fields.SlugField options: members: false
Поля динамических объектов
::: utilities.forms.fields.DynamicModelChoiceField options: members: false
::: utilities.forms.fields.DynamicModelMultipleChoiceField options: members: false
Поля типов контента
::: utilities.forms.fields.ContentTypeChoiceField options: members: false
::: utilities.forms.fields.ContentTypeMultipleChoiceField options: members: false
Поля импорта CSV
::: utilities.forms.fields.CSVChoiceField options: members: false
::: utilities.forms.fields.CSVMultipleChoiceField options: members: false
::: utilities.forms.fields.CSVModelChoiceField options: members: false
::: utilities.forms.fields.CSVContentTypeField options: members: false
::: utilities.forms.fields.CSVMultipleContentTypeField options: members: false
Отрисовка форм
::: utilities.forms.rendering.FieldSet
::: utilities.forms.rendering.InlineFields
::: utilities.forms.rendering.TabbedGroups
::: utilities.forms.rendering.ObjectAttribute