From 082afc26e615aced5df7102681a817f1cae9bada Mon Sep 17 00:00:00 2001 From: Johannes Schriewer Date: Sat, 8 Aug 2020 02:19:21 +0200 Subject: [PATCH] Model restructuring --- inventory/admin/item.py | 8 +++---- .../migrations/0005_auto_20200808_0135.py | 24 +++++++++++++++++++ .../0006_remove_documentation_item.py | 17 +++++++++++++ .../migrations/0007_item_documentation.py | 18 ++++++++++++++ inventory/models/box.py | 13 +++++++++- inventory/models/documentation.py | 4 +++- inventory/models/item.py | 3 ++- 7 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 inventory/migrations/0005_auto_20200808_0135.py create mode 100644 inventory/migrations/0006_remove_documentation_item.py create mode 100644 inventory/migrations/0007_item_documentation.py diff --git a/inventory/admin/item.py b/inventory/admin/item.py index 8287496..2491daf 100644 --- a/inventory/admin/item.py +++ b/inventory/admin/item.py @@ -5,9 +5,9 @@ from django.conf import settings from inventory.models import Item, Documentation -class DocumentationInlineAdmin(admin.TabularInline): - model = Documentation - extra = 1 +class DocumentationAdmin(admin.ModelAdmin): + list_display = ['file'] + search_fields = ['file'] class ItemAdmin(admin.ModelAdmin): @@ -16,10 +16,10 @@ class ItemAdmin(admin.ModelAdmin): list_filter = ['container'] search_fields = ['name', 'description'] readonly_fields = ['created_at', 'changed_at'] - inlines = [DocumentationInlineAdmin] def view_on_site(self, obj): url = reverse('item-detail', kwargs={'pk': obj.id}) return settings.SERVER_URL + url admin.site.register(Item, ItemAdmin) +admin.site.register(Documentation, DocumentationAdmin) \ No newline at end of file diff --git a/inventory/migrations/0005_auto_20200808_0135.py b/inventory/migrations/0005_auto_20200808_0135.py new file mode 100644 index 0000000..8593d18 --- /dev/null +++ b/inventory/migrations/0005_auto_20200808_0135.py @@ -0,0 +1,24 @@ +# Generated by Django 3.0.4 on 2020-08-07 23:35 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0004_auto_20200804_0055'), + ] + + operations = [ + migrations.AlterField( + model_name='documentation', + name='item', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='documentation', to='inventory.Item'), + ), + migrations.AlterField( + model_name='item', + name='name', + field=models.TextField(max_length=255), + ), + ] diff --git a/inventory/migrations/0006_remove_documentation_item.py b/inventory/migrations/0006_remove_documentation_item.py new file mode 100644 index 0000000..fe35134 --- /dev/null +++ b/inventory/migrations/0006_remove_documentation_item.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.4 on 2020-08-07 23:57 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0005_auto_20200808_0135'), + ] + + operations = [ + migrations.RemoveField( + model_name='documentation', + name='item', + ), + ] diff --git a/inventory/migrations/0007_item_documentation.py b/inventory/migrations/0007_item_documentation.py new file mode 100644 index 0000000..1e5da49 --- /dev/null +++ b/inventory/migrations/0007_item_documentation.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.4 on 2020-08-07 23:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0006_remove_documentation_item'), + ] + + operations = [ + migrations.AddField( + model_name='item', + name='documentation', + field=models.ManyToManyField(to='inventory.Documentation'), + ), + ] diff --git a/inventory/models/box.py b/inventory/models/box.py index 5ebafc0..899c992 100644 --- a/inventory/models/box.py +++ b/inventory/models/box.py @@ -1,3 +1,5 @@ +from django.utils.text import slugify +from django.template.loader import get_template, TemplateDoesNotExist from django.db import models from .container import CanBeContained, Container @@ -9,4 +11,13 @@ class Box(CanBeContained, Container): changed_at = models.DateTimeField(auto_now=True) class Meta: - verbose_name_plural = 'Boxes' \ No newline at end of file + verbose_name_plural = 'Boxes' + + @property + def template_name(self): + template = 'inventory/box-' + slugify(self.layout.name) + '.html' + try: + get_template(template) + return template + except TemplateDoesNotExist: + return 'inventory/box-generic.html' diff --git a/inventory/models/documentation.py b/inventory/models/documentation.py index 972f702..96928d7 100644 --- a/inventory/models/documentation.py +++ b/inventory/models/documentation.py @@ -6,4 +6,6 @@ class Documentation(models.Model): changed_at = models.DateTimeField(auto_now=True) file = models.FileField() - item = models.ForeignKey('inventory.Item', on_delete=models.CASCADE, related_name='documentation') + + def __str__(self): + return self.file.name \ No newline at end of file diff --git a/inventory/models/item.py b/inventory/models/item.py index cacd44c..7178228 100644 --- a/inventory/models/item.py +++ b/inventory/models/item.py @@ -5,7 +5,7 @@ from .container import CanBeContained class Item(CanBeContained): - name = models.CharField(max_length=255, unique=True) + name = models.TextField(max_length=255) description = models.CharField(max_length=4096) created_at = models.DateTimeField(auto_now_add=True) changed_at = models.DateTimeField(auto_now=True) @@ -17,6 +17,7 @@ class Item(CanBeContained): distributor_item_no = models.CharField(max_length=255, null=True, blank=True) price = models.DecimalField(decimal_places=3, max_digits=7, null=True, blank=True) last_ordered_on = models.DateField(null=True, blank=True) + documentation = models.ManyToManyField('inventory.Documentation') def __str__(self): return self.name \ No newline at end of file