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.conf import settings
@ -24,14 +24,15 @@ class WorkshopAdmin(admin.ModelAdmin):
url = reverse('workshop-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url
class BoxInlineAdmin(nested_admin.NestedTabularInline):
class BoxInlineAdmin(NestedTabularInline):
model = Box
fk_name = 'container'
extra = 1
fields = ['name', 'description', 'index', 'layout']
class AreaAdmin(nested_admin.NestedModelAdmin):
class AreaAdmin(NestedModelAdmin):
list_display = ['name', 'description', 'container']
readonly_fields = ['created_at', 'changed_at']
list_filter = ['container']
@ -43,16 +44,18 @@ class AreaAdmin(nested_admin.NestedModelAdmin):
return settings.SERVER_URL + url
class DocumentationInlineAdmin(nested_admin.NestedTabularInline):
class DocumentationInlineAdmin(NestedTabularInline):
model = Documentation
extra = 1
class ItemInlineAdmin(nested_admin.NestedStackedInline):
class ItemInlineAdmin(NestedStackedInline):
model = Item
extra = 1
inlines = [DocumentationInlineAdmin]
#inlines = [DocumentationInlineAdmin]
class BoxAdmin(nested_admin.NestedModelAdmin):
class BoxAdmin(NestedModelAdmin):
list_display = ['name', 'description', 'container']
readonly_fields = ['created_at', 'changed_at']
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.conf import settings
@ -13,4 +13,5 @@ class DistributorAdmin(admin.ModelAdmin):
url = reverse('distributor-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url
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.conf import settings
@ -21,5 +21,6 @@ class ItemAdmin(admin.ModelAdmin):
url = reverse('item-detail', kwargs={'pk': obj.id})
return settings.SERVER_URL + url
admin.site.register(Item, ItemAdmin)
admin.site.register(Documentation, DocumentationAdmin)

View file

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

View file

@ -10,7 +10,7 @@ class Container(models.Model):
if model == Container:
continue
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():
return model, q.first()
return Container, None
@ -28,7 +28,12 @@ class Container(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')
class Meta:

View file

@ -12,6 +12,6 @@ class Distributor(models.Model):
phone = models.CharField(max_length=128, null=True, blank=True)
email = models.EmailField(null=True, blank=True, default=None)
icon = models.ImageField(null=True, blank=True)
def __str__(self):
return self.name
return self.name

View file

@ -8,4 +8,4 @@ class Documentation(models.Model):
file = models.FileField()
def __str__(self):
return self.file.name
return self.file.name

View file

@ -10,14 +10,14 @@ class Item(CanBeContained):
created_at = models.DateTimeField(auto_now_add=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)
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)
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')
documentation = models.ManyToManyField('inventory.Documentation', related_name='items', blank=True)
def __str__(self):
return self.name

View file

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

View file

@ -8,10 +8,15 @@ from inventory.models import Area
@method_decorator(login_required, name='dispatch')
class AreaView(DetailView):
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')
class AreaListView(ListView):
model = Area

View file

@ -1,6 +1,8 @@
from typing import cast, Union
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import ListView, DetailView
from django.db.models import QuerySet
from inventory.models import Box
@ -9,9 +11,17 @@ from inventory.models import Box
class BoxView(DetailView):
context_object_name = 'box'
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 = []
for sublayout in layout:
if isinstance(sublayout, list):
@ -28,13 +38,13 @@ class BoxView(DetailView):
else:
result.append({
"index": idx,
"container_id": self.object.item_related.first().container_id
"container_id": self.object.pk
})
idx += 1
return result, idx
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['layouted'], _ = self.layout(self.object.item_related.all(), self.object.layout.data)
return self.render_to_response(context)