From 3ca926afacd0892a6047872f9fecad2c5e5d8b6b Mon Sep 17 00:00:00 2001 From: Johannes Schriewer Date: Sun, 5 Jan 2025 21:45:44 +0100 Subject: [PATCH] Manufacturer detail view --- inventory/models/manufacturer.py | 3 + .../inventory/manufacturer_detail.html | 131 ++++++++++++++++++ inventory/views/manufacturer.py | 19 ++- 3 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 inventory/templates/inventory/manufacturer_detail.html diff --git a/inventory/models/manufacturer.py b/inventory/models/manufacturer.py index bc5cfd9..9a94be5 100644 --- a/inventory/models/manufacturer.py +++ b/inventory/models/manufacturer.py @@ -14,3 +14,6 @@ class Manufacturer(models.Model): def __str__(self): return self.name + + class Meta: + ordering = ("name", ) diff --git a/inventory/templates/inventory/manufacturer_detail.html b/inventory/templates/inventory/manufacturer_detail.html new file mode 100644 index 0000000..a20846e --- /dev/null +++ b/inventory/templates/inventory/manufacturer_detail.html @@ -0,0 +1,131 @@ +{% extends "base.html" %} +{% load static %} +{% load formatstring %} + +{% block title %}Manufacturer: {{ manufacturer }}{% endblock %} + +{% block header_bar %} + + Manufacturer: {{ manufacturer.name }} + {{ manufacturer.description }} +{% endblock %} + +{% block header_icons %} + {% if user.is_staff %} +
  • + +
  • + {% endif %} +{% endblock %} + +{% block content %} + + + + + + + + + + + {% if manufacturer.icon %} + + + + + {% endif %} + + + + + + + + + + + + {% if manufacturer.created_at != manufacturer.changed_at %} + + {% endif %} + +
    Name{{ manufacturer.name }}
    Description{{ manufacturer.description }}
    Icon
    Link{% if manufacturer.web_link %}{{ manufacturer.web_link }}{% else %}-{% endif %}
    Tags +
      + {% for tag in manufacturer.tags.all %} +
    • {{ tag.name }}
    • + {% empty %} + No tags + {% endfor %} +
    +
    Created at{{ manufacturer.created_at }}
    Last change{{ manufacturer.changed_at }}
    + +

    Items

    + + + + + + + + + + + + + + + {% for item in items %} + + + + + + + + {% endfor %} + +
    NameDescriptionContainerDistributor
    {{ item.name }} + {% if item.documentation.all %} + + {% endif %} + {% if user.is_staff %} + + {% endif %} + {{ item.description }}{{ item.container.display_name }} + {% if item.distributor %} + + {% if item.distributor.icon %}{% endif %}{{ item.distributor.name }} + + {% else %} + - + {% endif %} +
    + + + +{% endblock %} \ No newline at end of file diff --git a/inventory/views/manufacturer.py b/inventory/views/manufacturer.py index d3ea14f..e36bddd 100644 --- a/inventory/views/manufacturer.py +++ b/inventory/views/manufacturer.py @@ -1,13 +1,24 @@ -from django.views import View +from django.core.paginator import Paginator from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.views.generic import ListView, DetailView -from inventory.models import Manufacturer +from inventory.models import Manufacturer, Item -class ManufacturerView(View): - pass +@method_decorator(login_required, name='dispatch') +class ManufacturerView(DetailView): + context_object_name = 'manufacturer' + queryset = Manufacturer.objects.all().prefetch_related('tags') + + def get_context_data(self, *args, object_list=None, **kwargs): + result = super().get_context_data(*args, object_list=object_list, **kwargs) + p = self.request.GET.get("item_page", 1) + paginator = Paginator(Item.objects.filter(manufacturer=self.get_object()).select_related('container', 'distributor').order_by('name'), 50) + result.update({ + "items": paginator.get_page(p) + }) + return result @method_decorator(login_required, name='dispatch')