1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Use singular names for M2M field filters

This commit is contained in:
Jeremy Stretch
2024-03-06 15:41:16 -05:00
parent 5552f2a7dd
commit 40a654b21e
3 changed files with 48 additions and 40 deletions

View File

@ -89,10 +89,12 @@ class EventRuleFilterSet(NetBoxModelFilterSet):
method='search',
label=_('Search'),
)
object_types_id = MultiValueNumberFilter(
object_type_id = MultiValueNumberFilter(
field_name='object_types__id'
)
object_types = ContentTypeFilter()
object_type = ContentTypeFilter(
field_name='object_types'
)
action_type = django_filters.MultipleChoiceFilter(
choices=EventRuleActionChoices
)
@ -124,10 +126,10 @@ class CustomFieldFilterSet(BaseFilterSet):
type = django_filters.MultipleChoiceFilter(
choices=CustomFieldTypeChoices
)
object_types_id = MultiValueNumberFilter(
object_type_id = MultiValueNumberFilter(
field_name='object_types__id'
)
object_types = ContentTypeFilter(
object_type = ContentTypeFilter(
field_name='object_types'
)
choice_set_id = django_filters.ModelMultipleChoiceFilter(
@ -142,8 +144,8 @@ class CustomFieldFilterSet(BaseFilterSet):
class Meta:
model = CustomField
fields = [
'id', 'object_types', 'name', 'group_name', 'required', 'search_weight', 'filter_logic', 'ui_visible',
'ui_editable', 'weight', 'is_cloneable', 'description',
'id', 'name', 'group_name', 'required', 'search_weight', 'filter_logic', 'ui_visible', 'ui_editable',
'weight', 'is_cloneable', 'description',
]
def search(self, queryset, name, value):
@ -190,15 +192,17 @@ class CustomLinkFilterSet(BaseFilterSet):
method='search',
label=_('Search'),
)
object_types_id = MultiValueNumberFilter(
object_type_id = MultiValueNumberFilter(
field_name='object_types__id'
)
object_types = ContentTypeFilter()
object_type = ContentTypeFilter(
field_name='object_types'
)
class Meta:
model = CustomLink
fields = [
'id', 'object_types', 'name', 'enabled', 'link_text', 'link_url', 'weight', 'group_name', 'new_window',
'id', 'name', 'enabled', 'link_text', 'link_url', 'weight', 'group_name', 'new_window',
]
def search(self, queryset, name, value):
@ -217,10 +221,12 @@ class ExportTemplateFilterSet(BaseFilterSet):
method='search',
label=_('Search'),
)
object_types_id = MultiValueNumberFilter(
object_type_id = MultiValueNumberFilter(
field_name='object_types__id'
)
object_types = ContentTypeFilter()
object_type = ContentTypeFilter(
field_name='object_types'
)
data_source_id = django_filters.ModelMultipleChoiceFilter(
queryset=DataSource.objects.all(),
label=_('Data source (ID)'),
@ -232,7 +238,7 @@ class ExportTemplateFilterSet(BaseFilterSet):
class Meta:
model = ExportTemplate
fields = ['id', 'object_types', 'name', 'description', 'data_synced']
fields = ['id', 'name', 'description', 'data_synced']
def search(self, queryset, name, value):
if not value.strip():
@ -248,10 +254,12 @@ class SavedFilterFilterSet(BaseFilterSet):
method='search',
label=_('Search'),
)
object_types_id = MultiValueNumberFilter(
object_type_id = MultiValueNumberFilter(
field_name='object_types__id'
)
object_types = ContentTypeFilter()
object_type = ContentTypeFilter(
field_name='object_types'
)
user_id = django_filters.ModelMultipleChoiceFilter(
queryset=get_user_model().objects.all(),
label=_('User (ID)'),
@ -268,7 +276,7 @@ class SavedFilterFilterSet(BaseFilterSet):
class Meta:
model = SavedFilter
fields = ['id', 'object_types', 'name', 'slug', 'description', 'enabled', 'shared', 'weight']
fields = ['id', 'name', 'slug', 'description', 'enabled', 'shared', 'weight']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -38,11 +38,11 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
fieldsets = (
(None, ('q', 'filter_id')),
(_('Attributes'), (
'type', 'object_types_id', 'group_name', 'weight', 'required', 'choice_set_id', 'ui_visible', 'ui_editable',
'type', 'object_type_id', 'group_name', 'weight', 'required', 'choice_set_id', 'ui_visible', 'ui_editable',
'is_cloneable',
)),
)
object_types_id = ContentTypeMultipleChoiceField(
object_type_id = ContentTypeMultipleChoiceField(
queryset=ObjectType.objects.with_feature('custom_fields'),
required=False,
label=_('Object type')
@ -108,9 +108,9 @@ class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
fieldsets = (
(None, ('q', 'filter_id')),
(_('Attributes'), ('object_types', 'enabled', 'new_window', 'weight')),
(_('Attributes'), ('object_type', 'enabled', 'new_window', 'weight')),
)
object_types = ContentTypeMultipleChoiceField(
object_type = ContentTypeMultipleChoiceField(
label=_('Object types'),
queryset=ObjectType.objects.with_feature('custom_links'),
required=False
@ -139,7 +139,7 @@ class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
fieldsets = (
(None, ('q', 'filter_id')),
(_('Data'), ('data_source_id', 'data_file_id')),
(_('Attributes'), ('object_types_id', 'mime_type', 'file_extension', 'as_attachment')),
(_('Attributes'), ('object_type_id', 'mime_type', 'file_extension', 'as_attachment')),
)
data_source_id = DynamicModelMultipleChoiceField(
queryset=DataSource.objects.all(),
@ -154,7 +154,7 @@ class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
'source_id': '$data_source_id'
}
)
object_types_id = ContentTypeMultipleChoiceField(
object_type_id = ContentTypeMultipleChoiceField(
queryset=ObjectType.objects.with_feature('export_templates'),
required=False,
label=_('Content types')
@ -195,9 +195,9 @@ class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
fieldsets = (
(None, ('q', 'filter_id')),
(_('Attributes'), ('object_types', 'enabled', 'shared', 'weight')),
(_('Attributes'), ('object_type', 'enabled', 'shared', 'weight')),
)
object_types = ContentTypeMultipleChoiceField(
object_type = ContentTypeMultipleChoiceField(
label=_('Object types'),
queryset=ObjectType.objects.public(),
required=False
@ -250,10 +250,10 @@ class EventRuleFilterForm(NetBoxModelFilterSetForm):
fieldsets = (
(None, ('q', 'filter_id', 'tag')),
(_('Attributes'), ('object_types_id', 'action_type', 'enabled')),
(_('Attributes'), ('object_type_id', 'action_type', 'enabled')),
(_('Events'), ('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end')),
)
object_types_id = ContentTypeMultipleChoiceField(
object_type_id = ContentTypeMultipleChoiceField(
queryset=ObjectType.objects.with_feature('event_rules'),
required=False,
label=_('Object type')

View File

@ -102,10 +102,10 @@ class CustomFieldTestCase(TestCase, BaseFilterSetTests):
params = {'name': ['Custom Field 1', 'Custom Field 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_object_types(self):
params = {'object_types': 'dcim.site'}
def test_object_type(self):
params = {'object_type': 'dcim.site'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'object_types_id': [ObjectType.objects.get_by_natural_key('dcim', 'site').pk]}
params = {'object_type_id': [ObjectType.objects.get_by_natural_key('dcim', 'site').pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_required(self):
@ -350,10 +350,10 @@ class EventRuleTestCase(TestCase, BaseFilterSetTests):
params = {'description': ['foobar1', 'foobar2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_object_types(self):
params = {'object_types': 'dcim.region'}
def test_object_type(self):
params = {'object_type': 'dcim.region'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'object_types_id': [ObjectType.objects.get_for_model(Region).pk]}
params = {'object_type_id': [ObjectType.objects.get_for_model(Region).pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_action_type(self):
@ -435,10 +435,10 @@ class CustomLinkTestCase(TestCase, BaseFilterSetTests):
params = {'name': ['Custom Link 1', 'Custom Link 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_object_types(self):
params = {'object_types': 'dcim.site'}
def test_object_type(self):
params = {'object_type': 'dcim.site'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'object_types_id': [ObjectType.objects.get_for_model(Site).pk]}
params = {'object_type_id': [ObjectType.objects.get_for_model(Site).pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_weight(self):
@ -525,10 +525,10 @@ class SavedFilterTestCase(TestCase, BaseFilterSetTests):
params = {'description': ['foobar1', 'foobar2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_object_types(self):
params = {'object_types': 'dcim.site'}
def test_object_type(self):
params = {'object_type': 'dcim.site'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'object_types_id': [ObjectType.objects.get_for_model(Site).pk]}
params = {'object_type_id': [ObjectType.objects.get_for_model(Site).pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_user(self):
@ -656,10 +656,10 @@ class ExportTemplateTestCase(TestCase, BaseFilterSetTests):
params = {'name': ['Export Template 1', 'Export Template 2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_object_types(self):
params = {'object_types': 'dcim.site'}
def test_object_type(self):
params = {'object_type': 'dcim.site'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
params = {'object_types_id': [ObjectType.objects.get_for_model(Site).pk]}
params = {'object_type_id': [ObjectType.objects.get_for_model(Site).pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
def test_description(self):