added admin editable units and categories
This commit is contained in:
parent
5be3707449
commit
82a824cf41
|
@ -2,12 +2,14 @@ from django.contrib import admin
|
|||
|
||||
# Register your models here.
|
||||
|
||||
from .models import PantryItem, PantryItemLine
|
||||
from .models import PantryItem, PantryItemLine, Unit, Category
|
||||
|
||||
|
||||
class PantryItemInLine(admin.TabularInline):
|
||||
model = PantryItemLine
|
||||
extra = 1
|
||||
|
||||
|
||||
def upper_case_name(obj):
|
||||
return obj.name.upper()
|
||||
upper_case_name.short_description = 'Name'
|
||||
|
@ -18,12 +20,13 @@ def capitalize_name(obj):
|
|||
upper_case_name.short_description = 'Name'
|
||||
|
||||
|
||||
|
||||
class PantryItemInLineAdmin(admin.ModelAdmin):
|
||||
list_filter = ['expiry_date', 'unit', 'pantry_item', 'pantry_item__min_quantity']
|
||||
list_filter = ['expiry_date', 'pantry_item__unit', 'pantry_item', 'pantry_item__min_quantity']
|
||||
search_fields = ['info', 'pantry_item__name', 'pantry_item__info']
|
||||
autocomplete_fields = ['pantry_item',]
|
||||
fields = (
|
||||
autocomplete_fields = ['pantry_item']
|
||||
|
||||
readonly_fields = ['unit']
|
||||
fields = (
|
||||
'pantry_item',
|
||||
'quantity',
|
||||
'expiry_date',
|
||||
|
@ -40,14 +43,18 @@ class PantryItemInLineAdmin(admin.ModelAdmin):
|
|||
'info',
|
||||
)
|
||||
|
||||
class AutocompleteAdmin(admin.ModelAdmin):
|
||||
"""Class used to satisfy an admin check"""
|
||||
search_fields = ["name"]
|
||||
|
||||
class PantryItemAdmin(admin.ModelAdmin):
|
||||
list_filter = ['category', 'unit', 'min_quantity']
|
||||
search_fields = ['info', 'name']
|
||||
search_fields = ['info', 'name', 'category', 'unit']
|
||||
autocomplete_fields = ['category', 'unit']
|
||||
inlines = [PantryItemInLine]
|
||||
# TODO: make category a model
|
||||
#autocomplete_fields = ['category',]
|
||||
fields = (
|
||||
fields = (
|
||||
'name',
|
||||
'category',
|
||||
('min_quantity', 'unit'),
|
||||
|
@ -64,3 +71,5 @@ class PantryItemAdmin(admin.ModelAdmin):
|
|||
|
||||
admin.site.register(PantryItem, PantryItemAdmin)
|
||||
admin.site.register(PantryItemLine, PantryItemInLineAdmin)
|
||||
admin.site.register(Unit, AutocompleteAdmin)
|
||||
admin.site.register(Category, AutocompleteAdmin)
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Generated by Django 2.1.1 on 2018-09-23 20:25
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('inventory', '0010_auto_20180916_1252'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Category',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Unit',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unit', models.CharField(max_length=50)),
|
||||
],
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='pantryitemline',
|
||||
name='unit',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='pantryitem',
|
||||
name='category',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.Category'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='pantryitem',
|
||||
name='min_quantity',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='pantryitem',
|
||||
name='unit',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='inventory.Unit'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='pantryitemline',
|
||||
name='pantry_item',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='inventory.PantryItem'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='pantryitemline',
|
||||
name='size',
|
||||
field=models.IntegerField(default=1),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.1.1 on 2018-09-23 20:37
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('inventory', '0011_auto_20180923_2025'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='unit',
|
||||
old_name='unit',
|
||||
new_name='name',
|
||||
),
|
||||
]
|
|
@ -2,17 +2,6 @@ from django.db import models
|
|||
|
||||
# Create your models here.
|
||||
|
||||
CATEGORIES = (
|
||||
('UC', 'UNCATEGORIZED'), # bloem meel pasta
|
||||
('GS', 'GENRAL_STOCK'), # bloem meel pasta
|
||||
('CANS', 'CANS'),
|
||||
('BR', 'BREAKFAST'),
|
||||
('SAV', 'SAVORIES'),
|
||||
('SW', 'SWEETS'),
|
||||
('SN', 'SNACKS'),
|
||||
('SP', 'SPICES'),
|
||||
('DR', 'DRINKS'),
|
||||
)
|
||||
|
||||
UNITS = (
|
||||
('L', 'miliLiter'),
|
||||
|
@ -25,22 +14,46 @@ UNITS = (
|
|||
)
|
||||
|
||||
|
||||
class Category(models.Model):
|
||||
"""A category for a pantry item to be in
|
||||
e.g.
|
||||
UNCATEGORIZED
|
||||
GENRAL_STOCK # bloem meel pasta
|
||||
CANS
|
||||
BREAKFAST
|
||||
SAVORIES
|
||||
SWEETS
|
||||
SNACKS
|
||||
SPICES
|
||||
DRINKS
|
||||
"""
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
#class ShoppingList(models.Model):
|
||||
# - pantryitems < min_quantity in pantryitemlists
|
||||
# - shoppinglistitems
|
||||
# - user ?
|
||||
# info
|
||||
# quantity
|
||||
# unit
|
||||
# name
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Unit(models.Model):
|
||||
"""A unit
|
||||
e.g. Mililiter
|
||||
Grams
|
||||
Roll
|
||||
Tube
|
||||
Bag
|
||||
Bar
|
||||
Pack
|
||||
"""
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class PantryItem(models.Model):
|
||||
# user?
|
||||
name = models.CharField(max_length=200)
|
||||
category = models.CharField(max_length=200, choices=CATEGORIES, default='UC')
|
||||
category = models.ForeignKey(Category, on_delete=models.PROTECT)
|
||||
min_quantity = models.IntegerField(default=1) #, decimal_places=3, max_digits=32)
|
||||
unit = models.CharField(max_length=20, null=True, blank=True, choices=UNITS)
|
||||
unit = models.ForeignKey(Unit, on_delete=models.PROTECT, null=True)
|
||||
info = models.CharField(max_length=200, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
|
@ -52,11 +65,13 @@ class PantryItemLine(models.Model):
|
|||
quantity = models.IntegerField(default=1)
|
||||
expiry_date = models.DateField(null=True, blank=True)
|
||||
size = models.IntegerField(default=1) #, decimal_places=3, max_digits=32)
|
||||
unit = models.CharField(max_length=20, null=True, blank=True, choices=UNITS)
|
||||
info = models.CharField(max_length=200, null=True, blank=True)
|
||||
|
||||
def unit(self):
|
||||
return self.pantry_item.unit
|
||||
|
||||
def get_absolute_url(self):
|
||||
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.unit]])
|
||||
return ' '.join([str(x) for x in [self.pantry_item.name, self.quantity, 'X', self.size, self.pantry_item.unit]])
|
||||
|
|
|
@ -10,5 +10,4 @@ urlpatterns = [
|
|||
# TODO: add categories
|
||||
# TODO: add pantry item selection
|
||||
path('expirations/', views.Expirations.as_view(), name='expirations'),
|
||||
path('item/<int:pk>/', views.DetailView.as_view(), name='pantryitemlinedetail'),
|
||||
]
|
||||
|
|
|
@ -18,9 +18,6 @@ def consume(request):
|
|||
return render(request, "inventory/consume.html")
|
||||
|
||||
|
||||
def add(request):
|
||||
return render(request, "inventory/add.html")
|
||||
|
||||
class Shoppinglist(generic.ListView):
|
||||
template_name = "inventory/shoppinglist.html"
|
||||
context_object_name = 'pis'
|
||||
|
@ -30,14 +27,9 @@ class Shoppinglist(generic.ListView):
|
|||
#return PantryItemLine.objects.filter(quantity__lt=F('pantry_item__min_quantity'))
|
||||
|
||||
|
||||
|
||||
class Expirations(generic.ListView):
|
||||
template_name = "inventory/expirations.html"
|
||||
context_object_name = 'pis'
|
||||
|
||||
def get_queryset(self):
|
||||
return PantryItemLine.objects.exclude(expiry_date__isnull=True).order_by('expiry_date')
|
||||
|
||||
|
||||
class DetailView(generic.DetailView):
|
||||
model = PantryItemLine
|
||||
|
|
Loading…
Reference in New Issue