diff --git a/.gitignore b/.gitignore index 894a44c..75b1991 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ venv.bak/ # mypy .mypy_cache/ + + +.DS_Store diff --git a/im/settings.py b/im/settings.py index a058b4f..c0c46a8 100644 --- a/im/settings.py +++ b/im/settings.py @@ -101,9 +101,9 @@ AUTH_PASSWORD_VALIDATORS = [ ] # enabling this may speed up testing -#PASSWORD_HASHERS = [ +# PASSWORD_HASHERS = [ # 'django.contrib.auth.hashers.MD5PasswordHasher', -#] +# ] # Internationalization # https://docs.djangoproject.com/en/2.1/topics/i18n/ diff --git a/inventory/admin.py b/inventory/admin.py index b0d62c7..f154200 100644 --- a/inventory/admin.py +++ b/inventory/admin.py @@ -9,7 +9,6 @@ class PantryItemInLine(admin.TabularInline): extra = 1 - class LocationInLine(admin.TabularInline): model = Location extra = 1 @@ -17,11 +16,15 @@ class LocationInLine(admin.TabularInline): def upper_case_name(obj): return obj.name.upper() + + upper_case_name.short_description = 'Name' def capitalize_name(obj): return obj.name.capitalize() + + upper_case_name.short_description = 'Name' @@ -65,7 +68,7 @@ class PantryItemAdmin(admin.ModelAdmin): inlines = [PantryItemInLine] # TODO: make category a model - #autocomplete_fields = ['category',] + # autocomplete_fields = ['category',] fields = ( 'name', 'category', @@ -93,6 +96,7 @@ class ShoppingListItemAdmin(PantryItemAdmin): 'info', ) + admin.site.register(PantryItem, PantryItemAdmin) admin.site.register(ShoppingListItem, ShoppingListItemAdmin) admin.site.register(PantryItemLine, PantryItemLineAdmin) diff --git a/inventory/models.py b/inventory/models.py index 88ab969..4276539 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -57,7 +57,7 @@ class PantryItem(models.Model): # if expiry duration is set the expiration date for a pantryitemline will be set to now + duration on save # represents days expiry_duration = models.IntegerField(null=True, blank=True) - name = models.CharField(max_length=200) + name = models.CharField(max_length=200) unit = models.ForeignKey(Unit, on_delete=models.PROTECT, null=True) info = models.CharField(max_length=200, null=True, blank=True) # location is saved on a per item base, not itemline @@ -78,7 +78,7 @@ class PantryItemLine(models.Model): pantry_item = models.ForeignKey(PantryItem, on_delete=models.PROTECT) quantity = models.IntegerField(default=1) expiry_date = models.DateField(null=True, blank=True) - size = models.IntegerField(default=1) #, decimal_places=3, max_digits=32) + size = models.IntegerField(default=1) info = models.CharField(max_length=200, null=True, blank=True) def unit(self): @@ -88,5 +88,5 @@ class PantryItemLine(models.Model): return reverse('pantryitemlinedetail', kwargs={'pk': self.pk}) def __str__(self): - return ' '.join([str(x) for x in [self.pantry_item.name, self.quantity, 'X', self.size, self.pantry_item.unit]]) - + return ' '.join([str(x) for x in [self.pantry_item.name, self.quantity, 'X', + self.size, self.pantry_item.unit]]) diff --git a/inventory/views.py b/inventory/views.py index 5b54e9f..a3791f0 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1,7 +1,5 @@ -from django.shortcuts import render, get_object_or_404 -from django.http import HttpResponse +from django.shortcuts import render from django.views import generic -from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.db.models import F, Sum, Q @@ -26,9 +24,10 @@ class Shoppinglist(generic.ListView): """ Return pantryitems for which we have None itemlines or Itemlines whith a total quantitly less than required """ - return PantryItem.objects.annotate(total_quantity=Sum(F('pantryitemline__quantity') * - F('pantryitemline__size'))).filter(Q(min_quantity__gt=F('total_quantity')) | Q(pantryitemline=None, - min_quantity__gt=0)) + return PantryItem.objects.annotate( + total_quantity=Sum(F('pantryitemline__quantity') * + F('pantryitemline__size')) + ).filter(Q(min_quantity__gt=F('total_quantity')) | Q(pantryitemline=None, min_quantity__gt=0)) class Expirations(generic.ListView):