mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-23 20:12:42 -06:00
Fix owner filter
This commit is contained in:
@@ -12,11 +12,10 @@ from netbox.forms import (
|
|||||||
NestedGroupModelFilterSetForm, NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm,
|
NestedGroupModelFilterSetForm, NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm,
|
||||||
PrimaryModelFilterSetForm,
|
PrimaryModelFilterSetForm,
|
||||||
)
|
)
|
||||||
from netbox.forms.mixins import OwnerMixin
|
|
||||||
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
||||||
from users.models import User
|
from users.models import Owner, User
|
||||||
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
|
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
|
||||||
from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField
|
from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
|
||||||
from utilities.forms.rendering import FieldSet
|
from utilities.forms.rendering import FieldSet
|
||||||
from utilities.forms.widgets import NumberWithOptions
|
from utilities.forms.widgets import NumberWithOptions
|
||||||
from virtualization.models import Cluster, ClusterGroup, VirtualMachine
|
from virtualization.models import Cluster, ClusterGroup, VirtualMachine
|
||||||
@@ -64,7 +63,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DeviceComponentFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class DeviceComponentFilterForm(NetBoxModelFilterSetForm):
|
||||||
name = forms.CharField(
|
name = forms.CharField(
|
||||||
label=_('Name'),
|
label=_('Name'),
|
||||||
required=False
|
required=False
|
||||||
@@ -141,6 +140,11 @@ class DeviceComponentFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('Device Status'),
|
label=_('Device Status'),
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
|
class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
|
||||||
|
|||||||
@@ -7,12 +7,13 @@ from extras.choices import *
|
|||||||
from extras.models import *
|
from extras.models import *
|
||||||
from netbox.events import get_event_type_choices
|
from netbox.events import get_event_type_choices
|
||||||
from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
|
from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
|
||||||
from netbox.forms.mixins import OwnerMixin, SavedFiltersMixin
|
from netbox.forms.mixins import SavedFiltersMixin
|
||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
from users.models import Group, User
|
from users.models import Group, Owner, User
|
||||||
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
|
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
|
||||||
from utilities.forms.fields import (
|
from utilities.forms.fields import (
|
||||||
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
|
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
|
||||||
|
TagFilterField,
|
||||||
)
|
)
|
||||||
from utilities.forms.rendering import FieldSet
|
from utilities.forms.rendering import FieldSet
|
||||||
from utilities.forms.widgets import DateTimePicker
|
from utilities.forms.widgets import DateTimePicker
|
||||||
@@ -38,7 +39,7 @@ __all__ = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = CustomField
|
model = CustomField
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
@@ -115,9 +116,14 @@ class CustomFieldFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
label=_('Validation regex'),
|
label=_('Validation regex'),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = CustomFieldChoiceSet
|
model = CustomFieldChoiceSet
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
@@ -130,9 +136,14 @@ class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
choice = forms.CharField(
|
choice = forms.CharField(
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CustomLinkFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = CustomLink
|
model = CustomLink
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
@@ -161,9 +172,14 @@ class CustomLinkFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
label=_('Weight'),
|
label=_('Weight'),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ExportTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = ExportTemplate
|
model = ExportTemplate
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'object_type_id'),
|
FieldSet('q', 'filter_id', 'object_type_id'),
|
||||||
@@ -207,6 +223,11 @@ class ExportTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
@@ -226,7 +247,7 @@ class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class SavedFilterFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = SavedFilter
|
model = SavedFilter
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id'),
|
FieldSet('q', 'filter_id'),
|
||||||
@@ -255,6 +276,11 @@ class SavedFilterFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
label=_('Weight'),
|
label=_('Weight'),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TableConfigFilterForm(SavedFiltersMixin, FilterForm):
|
class TableConfigFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
@@ -287,7 +313,7 @@ class TableConfigFilterForm(SavedFiltersMixin, FilterForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class WebhookFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class WebhookFilterForm(NetBoxModelFilterSetForm):
|
||||||
model = Webhook
|
model = Webhook
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
||||||
@@ -306,10 +332,15 @@ class WebhookFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('HTTP method')
|
label=_('HTTP method')
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
class EventRuleFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class EventRuleFilterForm(NetBoxModelFilterSetForm):
|
||||||
model = EventRule
|
model = EventRule
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
||||||
@@ -337,10 +368,15 @@ class EventRuleFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
|||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
class TagFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class TagFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = Tag
|
model = Tag
|
||||||
content_type_id = ContentTypeMultipleChoiceField(
|
content_type_id = ContentTypeMultipleChoiceField(
|
||||||
queryset=ObjectType.objects.with_feature('tags'),
|
queryset=ObjectType.objects.with_feature('tags'),
|
||||||
@@ -352,6 +388,11 @@ class TagFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('Allowed object type')
|
label=_('Allowed object type')
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm):
|
class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm):
|
||||||
@@ -375,7 +416,7 @@ class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConfigContextFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = ConfigContext
|
model = ConfigContext
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag_id'),
|
FieldSet('q', 'filter_id', 'tag_id'),
|
||||||
@@ -469,9 +510,14 @@ class ConfigContextFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('Tags')
|
label=_('Tags')
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm):
|
||||||
model = ConfigTemplate
|
model = ConfigTemplate
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag'),
|
FieldSet('q', 'filter_id', 'tag'),
|
||||||
@@ -511,6 +557,11 @@ class ConfigTemplateFilterForm(SavedFiltersMixin, OwnerMixin, FilterForm):
|
|||||||
choices=BOOLEAN_WITH_BLANK_CHOICES
|
choices=BOOLEAN_WITH_BLANK_CHOICES
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class LocalConfigContextFilterForm(forms.Form):
|
class LocalConfigContextFilterForm(forms.Form):
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ from django.db.models import Q
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from extras.choices import *
|
from extras.choices import *
|
||||||
from .mixins import CustomFieldsMixin, OwnerMixin, SavedFiltersMixin
|
from users.models import Owner
|
||||||
|
from utilities.forms.fields import DynamicModelChoiceField
|
||||||
|
from .mixins import CustomFieldsMixin, SavedFiltersMixin
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'NestedGroupModelFilterSetForm',
|
'NestedGroupModelFilterSetForm',
|
||||||
@@ -42,22 +44,34 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form)
|
|||||||
return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False)
|
return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False)
|
||||||
|
|
||||||
|
|
||||||
class PrimaryModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class PrimaryModelFilterSetForm(NetBoxModelFilterSetForm):
|
||||||
"""
|
"""
|
||||||
FilterSet form for models which inherit from PrimaryModel.
|
FilterSet form for models which inherit from PrimaryModel.
|
||||||
"""
|
"""
|
||||||
pass
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class OrganizationalModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class OrganizationalModelFilterSetForm(NetBoxModelFilterSetForm):
|
||||||
"""
|
"""
|
||||||
FilterSet form for models which inherit from OrganizationalModel.
|
FilterSet form for models which inherit from OrganizationalModel.
|
||||||
"""
|
"""
|
||||||
pass
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class NestedGroupModelFilterSetForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class NestedGroupModelFilterSetForm(NetBoxModelFilterSetForm):
|
||||||
"""
|
"""
|
||||||
FilterSet form for models which inherit from NestedGroupModel.
|
FilterSet form for models which inherit from NestedGroupModel.
|
||||||
"""
|
"""
|
||||||
pass
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class OwnerMixin(forms.Form):
|
|||||||
"""
|
"""
|
||||||
Add an `owner` field to forms for models which support Owner assignment.
|
Add an `owner` field to forms for models which support Owner assignment.
|
||||||
"""
|
"""
|
||||||
owner_id = DynamicModelChoiceField(
|
owner = DynamicModelChoiceField(
|
||||||
queryset=Owner.objects.all(),
|
queryset=Owner.objects.all(),
|
||||||
required=False,
|
required=False,
|
||||||
label=_('Owner'),
|
label=_('Owner'),
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ from extras.forms import LocalConfigContextFilterForm
|
|||||||
from extras.models import ConfigTemplate
|
from extras.models import ConfigTemplate
|
||||||
from ipam.models import VRF, VLANTranslationPolicy
|
from ipam.models import VRF, VLANTranslationPolicy
|
||||||
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
|
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
|
||||||
from netbox.forms.mixins import OwnerMixin
|
|
||||||
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
|
||||||
|
from users.models import Owner
|
||||||
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES
|
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES
|
||||||
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
|
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
|
||||||
from utilities.forms.rendering import FieldSet
|
from utilities.forms.rendering import FieldSet
|
||||||
from virtualization.choices import *
|
from virtualization.choices import *
|
||||||
from virtualization.models import *
|
from virtualization.models import *
|
||||||
@@ -200,7 +200,7 @@ class VirtualMachineFilterForm(
|
|||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
class VMInterfaceFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class VMInterfaceFilterForm(NetBoxModelFilterSetForm):
|
||||||
model = VMInterface
|
model = VMInterface
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
||||||
@@ -254,10 +254,15 @@ class VMInterfaceFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
|||||||
required=False,
|
required=False,
|
||||||
label=_('VLAN Translation Policy')
|
label=_('VLAN Translation Policy')
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
class VirtualDiskFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
class VirtualDiskFilterForm(NetBoxModelFilterSetForm):
|
||||||
model = VirtualDisk
|
model = VirtualDisk
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
|
||||||
@@ -274,4 +279,9 @@ class VirtualDiskFilterForm(OwnerMixin, NetBoxModelFilterSetForm):
|
|||||||
required=False,
|
required=False,
|
||||||
min_value=1
|
min_value=1
|
||||||
)
|
)
|
||||||
|
owner_id = DynamicModelChoiceField(
|
||||||
|
queryset=Owner.objects.all(),
|
||||||
|
required=False,
|
||||||
|
label=_('Owner'),
|
||||||
|
)
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|||||||
Reference in New Issue
Block a user