Перейти к содержанию

Формы

Классы форм

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