mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 04:22:01 -06:00
Adds Region.comments field in the required locations
- [x] 1. Add the field to the model class - [x] 2. Generate and run database migrations - [NA] 3. Add validation logic to clean() - [NA] 4. Update relevant querysets - [x] 5. Update API serializer - [ ] 6. Add fields to forms - [x] dcim.forms.model_forms.RegionForm, create/edit (e.g. model_forms.py) - [x] dcim.forms.buld_edit.RegionBulkEditForm, bulk edit - [x] dcim.dorms.bulk_import.RegionImportForm, CSV import - [NA] filter (UI and API) - [x] 7. Extend object filter set - [x] 8. Add column to object table - [x] 9. Update the SearchIndex - [x] 10. Update the UI templates - [x] 11. Create/extend test cases - [NA] models - [x] views - [NA] forms - [x] filtersets - [x] api - [NA] 12. Update the model's documentation
This commit is contained in:
parent
2e2c815c91
commit
9a9d6cdedb
@ -27,7 +27,7 @@ class RegionSerializer(NestedGroupModelSerializer):
|
|||||||
model = Region
|
model = Region
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields',
|
'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields',
|
||||||
'created', 'last_updated', 'site_count', 'prefix_count', '_depth',
|
'created', 'last_updated', 'site_count', 'prefix_count', 'comments', '_depth',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth')
|
brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth')
|
||||||
|
|
||||||
|
@ -110,6 +110,15 @@ class RegionFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
|||||||
model = Region
|
model = Region
|
||||||
fields = ('id', 'name', 'slug', 'description')
|
fields = ('id', 'name', 'slug', 'description')
|
||||||
|
|
||||||
|
def search(self, queryset, name, value):
|
||||||
|
if not value.strip():
|
||||||
|
return queryset
|
||||||
|
return queryset.filter(
|
||||||
|
Q(name__icontains=value) |
|
||||||
|
Q(description__icontains=value) |
|
||||||
|
Q(comments__icontains=value)
|
||||||
|
).distinct()
|
||||||
|
|
||||||
|
|
||||||
class SiteGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
class SiteGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
||||||
parent_id = django_filters.ModelMultipleChoiceFilter(
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
|
@ -78,12 +78,13 @@ class RegionBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
max_length=200,
|
max_length=200,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
comments = CommentField()
|
||||||
|
|
||||||
model = Region
|
model = Region
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('parent', 'description'),
|
FieldSet('parent', 'description'),
|
||||||
)
|
)
|
||||||
nullable_fields = ('parent', 'description')
|
nullable_fields = ('parent', 'description', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class SiteGroupBulkEditForm(NetBoxModelBulkEditForm):
|
class SiteGroupBulkEditForm(NetBoxModelBulkEditForm):
|
||||||
|
@ -68,7 +68,7 @@ class RegionImportForm(NetBoxModelImportForm):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Region
|
model = Region
|
||||||
fields = ('name', 'slug', 'parent', 'description', 'tags')
|
fields = ('name', 'slug', 'parent', 'description', 'tags', 'comments')
|
||||||
|
|
||||||
|
|
||||||
class SiteGroupImportForm(NetBoxModelImportForm):
|
class SiteGroupImportForm(NetBoxModelImportForm):
|
||||||
|
@ -78,6 +78,7 @@ class RegionForm(NetBoxModelForm):
|
|||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
slug = SlugField()
|
slug = SlugField()
|
||||||
|
comments = CommentField()
|
||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('parent', 'name', 'slug', 'description', 'tags'),
|
FieldSet('parent', 'name', 'slug', 'description', 'tags'),
|
||||||
@ -86,7 +87,7 @@ class RegionForm(NetBoxModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Region
|
model = Region
|
||||||
fields = (
|
fields = (
|
||||||
'parent', 'name', 'slug', 'description', 'tags',
|
'parent', 'name', 'slug', 'description', 'tags', 'comments',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -318,6 +318,7 @@ class RegionIndex(SearchIndex):
|
|||||||
('name', 100),
|
('name', 100),
|
||||||
('slug', 110),
|
('slug', 110),
|
||||||
('description', 500),
|
('description', 500),
|
||||||
|
('comments', 5000),
|
||||||
)
|
)
|
||||||
display_attrs = ('parent', 'description')
|
display_attrs = ('parent', 'description')
|
||||||
|
|
||||||
|
@ -36,8 +36,8 @@ class RegionTable(ContactsColumnMixin, NetBoxTable):
|
|||||||
class Meta(NetBoxTable.Meta):
|
class Meta(NetBoxTable.Meta):
|
||||||
model = Region
|
model = Region
|
||||||
fields = (
|
fields = (
|
||||||
'pk', 'id', 'name', 'slug', 'site_count', 'description', 'contacts', 'tags', 'created', 'last_updated',
|
'pk', 'id', 'name', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags',
|
||||||
'actions',
|
'created', 'last_updated', 'actions',
|
||||||
)
|
)
|
||||||
default_columns = ('pk', 'name', 'site_count', 'description')
|
default_columns = ('pk', 'name', 'site_count', 'description')
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ class RegionTest(APIViewTestCases.APIViewTestCase):
|
|||||||
{
|
{
|
||||||
'name': 'Region 4',
|
'name': 'Region 4',
|
||||||
'slug': 'region-4',
|
'slug': 'region-4',
|
||||||
|
'comments': 'this is region 4, not region 5',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'Region 5',
|
'name': 'Region 5',
|
||||||
@ -86,13 +87,14 @@ class RegionTest(APIViewTestCases.APIViewTestCase):
|
|||||||
]
|
]
|
||||||
bulk_update_data = {
|
bulk_update_data = {
|
||||||
'description': 'New description',
|
'description': 'New description',
|
||||||
|
'comments': 'New comments',
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
|
|
||||||
Region.objects.create(name='Region 1', slug='region-1')
|
Region.objects.create(name='Region 1', slug='region-1')
|
||||||
Region.objects.create(name='Region 2', slug='region-2')
|
Region.objects.create(name='Region 2', slug='region-2', comments='what in the world is happening?')
|
||||||
Region.objects.create(name='Region 3', slug='region-3')
|
Region.objects.create(name='Region 3', slug='region-3')
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,9 +67,15 @@ class RegionTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
|
|
||||||
parent_regions = (
|
parent_regions = (
|
||||||
Region(name='Region 1', slug='region-1', description='foobar1'),
|
Region(
|
||||||
Region(name='Region 2', slug='region-2', description='foobar2'),
|
name='Region 1', slug='region-1', description='foobar1', comments="There's nothing that",
|
||||||
Region(name='Region 3', slug='region-3', description='foobar3'),
|
),
|
||||||
|
Region(
|
||||||
|
name='Region 2', slug='region-2', description='foobar2', comments='a hundred men or more',
|
||||||
|
),
|
||||||
|
Region(
|
||||||
|
name='Region 3', slug='region-3', description='foobar3', comments='could ever do'
|
||||||
|
),
|
||||||
)
|
)
|
||||||
for region in parent_regions:
|
for region in parent_regions:
|
||||||
region.save()
|
region.save()
|
||||||
@ -100,6 +106,13 @@ class RegionTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
params = {'q': 'foobar1'}
|
params = {'q': 'foobar1'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
||||||
|
|
||||||
|
def test_q_comments(self):
|
||||||
|
params = {'q': 'there'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
||||||
|
|
||||||
|
params = {'q': 'hundred men could'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
|
||||||
|
|
||||||
def test_name(self):
|
def test_name(self):
|
||||||
params = {'name': ['Region 1', 'Region 2']}
|
params = {'name': ['Region 1', 'Region 2']}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
@ -25,8 +25,10 @@ class RegionTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
|
|||||||
|
|
||||||
# Create three Regions
|
# Create three Regions
|
||||||
regions = (
|
regions = (
|
||||||
Region(name='Region 1', slug='region-1'),
|
Region(name='Region 1', slug='region-1', comments=''),
|
||||||
Region(name='Region 2', slug='region-2'),
|
Region(
|
||||||
|
name='Region 2', slug='region-2', comments="It's going to take a lot to drag me away from you"
|
||||||
|
),
|
||||||
Region(name='Region 3', slug='region-3'),
|
Region(name='Region 3', slug='region-3'),
|
||||||
)
|
)
|
||||||
for region in regions:
|
for region in regions:
|
||||||
@ -40,13 +42,14 @@ class RegionTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
|
|||||||
'parent': regions[2].pk,
|
'parent': regions[2].pk,
|
||||||
'description': 'A new region',
|
'description': 'A new region',
|
||||||
'tags': [t.pk for t in tags],
|
'tags': [t.pk for t in tags],
|
||||||
|
'comments': 'This comment is really exciting!',
|
||||||
}
|
}
|
||||||
|
|
||||||
cls.csv_data = (
|
cls.csv_data = (
|
||||||
"name,slug,description",
|
"name,slug,description,comments",
|
||||||
"Region 4,region-4,Fourth region",
|
"Region 4,region-4,Fourth region,",
|
||||||
"Region 5,region-5,Fifth region",
|
"Region 5,region-5,Fifth region,hi guys",
|
||||||
"Region 6,region-6,Sixth region",
|
"Region 6,region-6,Sixth region,bye guys",
|
||||||
)
|
)
|
||||||
|
|
||||||
cls.csv_update_data = (
|
cls.csv_update_data = (
|
||||||
@ -58,6 +61,7 @@ class RegionTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
|
|||||||
|
|
||||||
cls.bulk_edit_data = {
|
cls.bulk_edit_data = {
|
||||||
'description': 'New description',
|
'description': 'New description',
|
||||||
|
'comments': 'This comment is super exciting!!!',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% include 'inc/panels/tags.html' %}
|
{% include 'inc/panels/tags.html' %}
|
||||||
{% include 'inc/panels/custom_fields.html' %}
|
{% include 'inc/panels/custom_fields.html' %}
|
||||||
|
{% include 'inc/panels/comments.html' %}
|
||||||
{% plugin_left_page object %}
|
{% plugin_left_page object %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-md-6">
|
<div class="col col-md-6">
|
||||||
|
Loading…
Reference in New Issue
Block a user