From 55fc5f7c3193cf6c9b07a712a3295c6c6299acc4 Mon Sep 17 00:00:00 2001 From: Jan Krupa Date: Thu, 7 Sep 2023 11:44:51 +0000 Subject: [PATCH 1/2] Add description filed to attachments for short notes --- netbox_attachments/api/serializers.py | 2 +- netbox_attachments/filtersets.py | 9 +++++++-- netbox_attachments/forms.py | 3 ++- .../0005_netboxattachment_description.py | 18 ++++++++++++++++++ netbox_attachments/models.py | 6 ++++++ netbox_attachments/search.py | 1 + netbox_attachments/tables.py | 4 ++-- .../netbox_attachment_panel.html | 17 ++++++++--------- .../netbox_attachments/netboxattachment.html | 4 ++++ netbox_attachments/version.py | 2 +- 10 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 netbox_attachments/migrations/0005_netboxattachment_description.py diff --git a/netbox_attachments/api/serializers.py b/netbox_attachments/api/serializers.py index 9114728..5b98fee 100644 --- a/netbox_attachments/api/serializers.py +++ b/netbox_attachments/api/serializers.py @@ -21,7 +21,7 @@ class NetBoxAttachmentSerializer(NetBoxModelSerializer): class Meta: model = NetBoxAttachment fields = [ - 'id', 'url', 'display', 'content_type', 'object_id', 'parent', 'name', 'file', 'created', 'last_updated', 'comments', + 'id', 'url', 'display', 'content_type', 'object_id', 'parent', 'name', 'description', 'file', 'created', 'last_updated', 'comments', ] def validate(self, data): diff --git a/netbox_attachments/filtersets.py b/netbox_attachments/filtersets.py index 1f8bdef..f412f54 100644 --- a/netbox_attachments/filtersets.py +++ b/netbox_attachments/filtersets.py @@ -1,4 +1,5 @@ import django_filters +from django.db.models import Q from extras.filters import TagFilter from netbox.filtersets import BaseFilterSet from utilities.filters import ContentTypeFilter @@ -14,13 +15,17 @@ class NetBoxAttachmentFilterSet(BaseFilterSet): created = django_filters.DateTimeFilter() content_type = ContentTypeFilter() name = django_filters.CharFilter(lookup_expr="icontains") + description = django_filters.CharFilter(lookup_expr="icontains") tag = TagFilter() class Meta: model = NetBoxAttachment - fields = ['id', 'content_type_id', 'object_id', 'name'] + fields = ['id', 'content_type_id', 'object_id', 'name', 'description'] def search(self, queryset, name, value): if not value.strip(): return queryset - return queryset.filter(name__icontains=value) + + name_filter = Q(name__icontains=value) + description_filter = Q(description__icontains=value) + return queryset.filter(name_filter | description_filter) diff --git a/netbox_attachments/forms.py b/netbox_attachments/forms.py index 0586b29..5b6c6e9 100644 --- a/netbox_attachments/forms.py +++ b/netbox_attachments/forms.py @@ -14,13 +14,14 @@ class NetBoxAttachmentForm(NetBoxModelForm): class Meta: model = NetBoxAttachment fields = [ - 'name', 'file', 'comments', 'tags', + 'name', 'description', 'file', 'comments', 'tags', ] class NetBoxAttachmentFilterForm(NetBoxModelFilterSetForm): model = NetBoxAttachment name = forms.CharField(required=False) + description = forms.CharField(required=False) content_type_id = DynamicModelMultipleChoiceField( queryset=ContentType.objects.all(), required=False, diff --git a/netbox_attachments/migrations/0005_netboxattachment_description.py b/netbox_attachments/migrations/0005_netboxattachment_description.py new file mode 100644 index 0000000..86835a2 --- /dev/null +++ b/netbox_attachments/migrations/0005_netboxattachment_description.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.4 on 2023-09-07 11:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('netbox_attachments', '0004_netboxattachment_size_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='netboxattachment', + name='description', + field=models.CharField(blank=True, max_length=200), + ), + ] diff --git a/netbox_attachments/models.py b/netbox_attachments/models.py index 52a0826..bdd87bd 100644 --- a/netbox_attachments/models.py +++ b/netbox_attachments/models.py @@ -8,6 +8,7 @@ from django.db.models.signals import pre_delete from django.dispatch import receiver from django.core.exceptions import ObjectDoesNotExist +from django.utils.translation import gettext_lazy as _ from .utils import attachment_upload @@ -35,6 +36,11 @@ class NetBoxAttachment(NetBoxModel): max_length=254, blank=True ) + description = models.CharField( + verbose_name=_('description'), + max_length=200, + blank=True + ) comments = models.TextField( blank=True ) diff --git a/netbox_attachments/search.py b/netbox_attachments/search.py index 3927e3b..8e4ce15 100644 --- a/netbox_attachments/search.py +++ b/netbox_attachments/search.py @@ -7,5 +7,6 @@ class NetBoxAttachmentIndex(SearchIndex): model = NetBoxAttachment fields = ( ('name', 100), + ('description', 200), ('comments', 5000), ) diff --git a/netbox_attachments/tables.py b/netbox_attachments/tables.py index b260b95..8f73467 100644 --- a/netbox_attachments/tables.py +++ b/netbox_attachments/tables.py @@ -34,9 +34,9 @@ class NetBoxAttachmentTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = NetBoxAttachment - fields = ('pk', 'id', 'name', 'parent', 'content_type', 'object_id', 'file', + fields = ('pk', 'id', 'name', 'description', 'parent', 'content_type', 'object_id', 'file', 'size', 'comments', 'actions', 'created', 'last_updated', 'tags') - default_columns = ('id', 'name', 'parent', + default_columns = ('id', 'name', 'description', 'parent', 'content_type', 'object_id', 'tags') row_attrs = { 'class': get_missing_parent_row_class, diff --git a/netbox_attachments/templates/netbox_attachments/netbox_attachment_panel.html b/netbox_attachments/templates/netbox_attachments/netbox_attachment_panel.html index 3666564..ae606d6 100644 --- a/netbox_attachments/templates/netbox_attachments/netbox_attachment_panel.html +++ b/netbox_attachments/templates/netbox_attachments/netbox_attachment_panel.html @@ -7,32 +7,31 @@
Attachments
- + {% for attachment in netbox_attachments %} - + - + + + + +
NameCommentDescription Size Created
{{ attachment }} {{ attachment.comments }}{{ attachment.description }} {{ attachment.size|filesizeformat }} {{ attachment.created }} - + - - diff --git a/netbox_attachments/templates/netbox_attachments/netboxattachment.html b/netbox_attachments/templates/netbox_attachments/netboxattachment.html index 3a82024..5721341 100644 --- a/netbox_attachments/templates/netbox_attachments/netboxattachment.html +++ b/netbox_attachments/templates/netbox_attachments/netboxattachment.html @@ -12,6 +12,10 @@
Attachments
Name {{ object }}
Description{{ object.description }}
Filename diff --git a/netbox_attachments/version.py b/netbox_attachments/version.py index 5fa9130..f6bb6f4 100644 --- a/netbox_attachments/version.py +++ b/netbox_attachments/version.py @@ -1 +1 @@ -__version__ = "2.0.3" +__version__ = "2.0.4" From 6e7378102800122faeb91c8ae54c2d6f50200dbc Mon Sep 17 00:00:00 2001 From: Jan Krupa Date: Thu, 7 Sep 2023 11:59:07 +0000 Subject: [PATCH 2/2] Hide directory name from the filename --- netbox_attachments/models.py | 24 +++++++++++-------- .../netbox_attachments/netboxattachment.html | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/netbox_attachments/models.py b/netbox_attachments/models.py index bdd87bd..ff69f05 100644 --- a/netbox_attachments/models.py +++ b/netbox_attachments/models.py @@ -1,15 +1,14 @@ -from django.contrib.contenttypes.fields import GenericForeignKey +import os + from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ObjectDoesNotExist from django.db import models -from django.urls import reverse -from netbox.models import NetBoxModel -from utilities.querysets import RestrictedQuerySet -from django.contrib.contenttypes.models import ContentType from django.db.models.signals import pre_delete from django.dispatch import receiver -from django.core.exceptions import ObjectDoesNotExist +from django.urls import reverse from django.utils.translation import gettext_lazy as _ - +from netbox.models import NetBoxModel +from utilities.querysets import RestrictedQuerySet from .utils import attachment_upload @@ -57,8 +56,12 @@ class Meta: def __str__(self): if self.name: return self.name - filename = self.file.name.rsplit('/', 1)[-1] - return filename.split('_', 2)[2] + + return self.filename + + @property + def filename(self): + return os.path.basename(self.file.name) @property def parent(self): @@ -107,4 +110,5 @@ def pre_delete_receiver(sender, instance, **kwargs): # As you don't have generic relation you should manually # find related actitities ctype = ContentType.objects.get_for_model(instance) - NetBoxAttachment.objects.filter(content_type=ctype, object_id=instance.pk).delete() + NetBoxAttachment.objects.filter( + content_type=ctype, object_id=instance.pk).delete() diff --git a/netbox_attachments/templates/netbox_attachments/netboxattachment.html b/netbox_attachments/templates/netbox_attachments/netboxattachment.html index 5721341..58026a8 100644 --- a/netbox_attachments/templates/netbox_attachments/netboxattachment.html +++ b/netbox_attachments/templates/netbox_attachments/netboxattachment.html @@ -19,7 +19,7 @@
Attachments
Filename - {{ object.file }} + {{ object.filename }}