Generic cleanup, fix linter messages

This commit is contained in:
Johannes Schriewer 2020-12-16 01:24:52 +01:00
parent e965cc01f9
commit 8d4d4bb3ed
No known key found for this signature in database
GPG key ID: 85EB2BC0D45A0F86
12 changed files with 58 additions and 30 deletions

View file

@ -1,6 +1,6 @@
import nested_admin from nested_admin.nested import NestedTabularInline, NestedModelAdmin, NestedStackedInline
from django.shortcuts import reverse from django.urls import reverse
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.conf import settings
@ -24,14 +24,15 @@ class WorkshopAdmin(admin.ModelAdmin):
url = reverse('workshop-detail', kwargs={'pk': obj.id}) url = reverse('workshop-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url return settings.SERVER_URL + url
class BoxInlineAdmin(nested_admin.NestedTabularInline):
class BoxInlineAdmin(NestedTabularInline):
model = Box model = Box
fk_name = 'container' fk_name = 'container'
extra = 1 extra = 1
fields = ['name', 'description', 'index', 'layout'] fields = ['name', 'description', 'index', 'layout']
class AreaAdmin(nested_admin.NestedModelAdmin): class AreaAdmin(NestedModelAdmin):
list_display = ['name', 'description', 'container'] list_display = ['name', 'description', 'container']
readonly_fields = ['created_at', 'changed_at'] readonly_fields = ['created_at', 'changed_at']
list_filter = ['container'] list_filter = ['container']
@ -43,16 +44,18 @@ class AreaAdmin(nested_admin.NestedModelAdmin):
return settings.SERVER_URL + url return settings.SERVER_URL + url
class DocumentationInlineAdmin(nested_admin.NestedTabularInline): class DocumentationInlineAdmin(NestedTabularInline):
model = Documentation model = Documentation
extra = 1 extra = 1
class ItemInlineAdmin(nested_admin.NestedStackedInline):
class ItemInlineAdmin(NestedStackedInline):
model = Item model = Item
extra = 1 extra = 1
inlines = [DocumentationInlineAdmin] #inlines = [DocumentationInlineAdmin]
class BoxAdmin(nested_admin.NestedModelAdmin):
class BoxAdmin(NestedModelAdmin):
list_display = ['name', 'description', 'container'] list_display = ['name', 'description', 'container']
readonly_fields = ['created_at', 'changed_at'] readonly_fields = ['created_at', 'changed_at']
list_filter = ['container'] list_filter = ['container']

View file

@ -1,4 +1,4 @@
from django.shortcuts import reverse from django.urls import reverse
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.conf import settings
@ -13,4 +13,5 @@ class DistributorAdmin(admin.ModelAdmin):
url = reverse('distributor-detail', kwargs={'pk': obj.id}) url = reverse('distributor-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url return settings.SERVER_URL + url
admin.site.register(Distributor, DistributorAdmin) admin.site.register(Distributor, DistributorAdmin)

View file

@ -1,4 +1,4 @@
from django.shortcuts import reverse from django.urls import reverse
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.conf import settings
@ -21,5 +21,6 @@ class ItemAdmin(admin.ModelAdmin):
url = reverse('item-detail', kwargs={'pk': obj.id}) url = reverse('item-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url return settings.SERVER_URL + url
admin.site.register(Item, ItemAdmin) admin.site.register(Item, ItemAdmin)
admin.site.register(Documentation, DocumentationAdmin) admin.site.register(Documentation, DocumentationAdmin)

View file

@ -1,13 +1,14 @@
import json import json
from django.shortcuts import reverse
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.db.models import JSONField
from django.contrib.postgres.fields import JSONField
from django.forms import widgets from django.forms import widgets
from inventory.models import Layout from inventory.models import Layout
from logging import getLogger
logger = getLogger(__name__)
class PrettyJSONWidget(widgets.Textarea): class PrettyJSONWidget(widgets.Textarea):
@ -30,9 +31,11 @@ class LayoutAdmin(admin.ModelAdmin):
formfield_overrides = { formfield_overrides = {
JSONField: {'widget': PrettyJSONWidget} JSONField: {'widget': PrettyJSONWidget}
} }
list_display = ['name', 'description']
# def view_on_site(self, obj): # def view_on_site(self, obj):
# url = reverse('layout-detail', kwargs={'id': obj.id}) # url = reverse('layout-detail', kwargs={'id': obj.id})
# return settings.SERVER_URL + url # return settings.SERVER_URL + url
admin.site.register(Layout, LayoutAdmin) admin.site.register(Layout, LayoutAdmin)

View file

@ -1,4 +1,4 @@
from django.shortcuts import reverse from django.urls import reverse
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.conf import settings
@ -13,4 +13,5 @@ class ManufacturerAdmin(admin.ModelAdmin):
url = reverse('manufacturer-detail', kwargs={'pk': obj.id}) url = reverse('manufacturer-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url return settings.SERVER_URL + url
admin.site.register(Manufacturer, ManufacturerAdmin) admin.site.register(Manufacturer, ManufacturerAdmin)

View file

@ -10,7 +10,7 @@ class Container(models.Model):
if model == Container: if model == Container:
continue continue
if issubclass(model, Container): if issubclass(model, Container):
q = model.objects.filter(container_ptr_id=self.id) q = model.objects.filter(container_ptr_id=self.pk)
if q.exists(): if q.exists():
return model, q.first() return model, q.first()
return Container, None return Container, None
@ -28,7 +28,12 @@ class Container(models.Model):
class CanBeContained(models.Model): class CanBeContained(models.Model):
container = models.ForeignKey('inventory.Container', related_name="%(class)s_related", null=True, on_delete=models.CASCADE) container = models.ForeignKey(
'inventory.Container',
related_name="%(class)s_related",
null=True,
on_delete=models.CASCADE
)
index = models.PositiveIntegerField('Index of compartment in layout') index = models.PositiveIntegerField('Index of compartment in layout')
class Meta: class Meta:

View file

@ -10,14 +10,14 @@ class Item(CanBeContained):
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
changed_at = models.DateTimeField(auto_now=True) changed_at = models.DateTimeField(auto_now=True)
metadata = JSONField('Custom metadata, used by templates', blank=True, null=True) metadata = models.JSONField('Custom metadata, used by templates', blank=True, null=True)
manufacturer = models.ForeignKey('inventory.Manufacturer', null=True, blank=True, on_delete=models.PROTECT) manufacturer = models.ForeignKey('inventory.Manufacturer', null=True, blank=True, on_delete=models.PROTECT)
distributor = models.ForeignKey('inventory.Distributor', null=True, blank=True, on_delete=models.PROTECT) distributor = models.ForeignKey('inventory.Distributor', null=True, blank=True, on_delete=models.PROTECT)
distributor_item_no = models.CharField(max_length=255, null=True, blank=True) 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) price = models.DecimalField(decimal_places=3, max_digits=7, null=True, blank=True)
last_ordered_on = models.DateField(null=True, blank=True) last_ordered_on = models.DateField(null=True, blank=True)
documentation = models.ManyToManyField('inventory.Documentation') documentation = models.ManyToManyField('inventory.Documentation', related_name='items', blank=True)
def __str__(self): def __str__(self):
return self.name return self.name

View file

@ -1,5 +1,4 @@
from django.db import models from django.db import models
from django.contrib.postgres.fields import JSONField
class Layout(models.Model): class Layout(models.Model):
@ -7,7 +6,7 @@ class Layout(models.Model):
description = models.CharField(max_length=4096) description = models.CharField(max_length=4096)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
changed_at = models.DateTimeField(auto_now=True) changed_at = models.DateTimeField(auto_now=True)
data = JSONField() data = models.JSONField()
def __str__(self): def __str__(self):
return self.name return self.name

View file

@ -8,10 +8,15 @@ from inventory.models import Area
@method_decorator(login_required, name='dispatch') @method_decorator(login_required, name='dispatch')
class AreaView(DetailView): class AreaView(DetailView):
context_object_name = 'area' context_object_name = 'area'
queryset = Area.objects.all().select_related('container', 'layout').prefetch_related('area_related', 'box_related') queryset = Area.objects.all().select_related(
'container',
'layout'
).prefetch_related(
'area_related',
'box_related'
)
@method_decorator(login_required, name='dispatch') @method_decorator(login_required, name='dispatch')
class AreaListView(ListView): class AreaListView(ListView):
model = Area model = Area

View file

@ -1,6 +1,8 @@
from typing import cast, Union
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views.generic import ListView, DetailView from django.views.generic import ListView, DetailView
from django.db.models import QuerySet
from inventory.models import Box from inventory.models import Box
@ -9,9 +11,17 @@ from inventory.models import Box
class BoxView(DetailView): class BoxView(DetailView):
context_object_name = 'box' context_object_name = 'box'
template_name_field = 'template_name' template_name_field = 'template_name'
queryset = Box.objects.all().select_related('container', 'layout').prefetch_related('box_related').order_by('index', 'id') queryset = Box.objects.all().select_related(
'container',
'layout'
).prefetch_related(
'box_related'
).order_by(
'index',
'id'
)
def layout(self, obj, layout, idx=0): def layout(self, obj: QuerySet, layout: list[Union[list, int]], idx=0):
result = [] result = []
for sublayout in layout: for sublayout in layout:
if isinstance(sublayout, list): if isinstance(sublayout, list):
@ -28,13 +38,13 @@ class BoxView(DetailView):
else: else:
result.append({ result.append({
"index": idx, "index": idx,
"container_id": self.object.item_related.first().container_id "container_id": self.object.pk
}) })
idx += 1 idx += 1
return result, idx return result, idx
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
self.object = self.get_object() self.object = cast(Box, self.get_object())
context = self.get_context_data(object=self.object) context = self.get_context_data(object=self.object)
context['layouted'], _ = self.layout(self.object.item_related.all(), self.object.layout.data) context['layouted'], _ = self.layout(self.object.item_related.all(), self.object.layout.data)
return self.render_to_response(context) return self.render_to_response(context)