Generic cleanup, fix linter messages
This commit is contained in:
parent
e965cc01f9
commit
8d4d4bb3ed
12 changed files with 58 additions and 30 deletions
|
@ -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']
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -8,4 +8,4 @@ class Documentation(models.Model):
|
|||
file = models.FileField()
|
||||
|
||||
def __str__(self):
|
||||
return self.file.name
|
||||
return self.file.name
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue