Give label styles their own model.

master
Robert Gerus 2020-03-07 12:34:19 +01:00
parent 7c267dc4be
commit d44df4cc45
4 changed files with 93 additions and 5 deletions

View File

@ -4,7 +4,7 @@ from django.contrib import admin
from django_select2.forms import ModelSelect2Widget, Select2MultipleWidget
from .models import Item, ItemImage, Category, Label
from .models import Item, ItemImage, Category, Label, LabelStyle
from .widgets import ItemSelectWidget, PropsSelectWidget
@ -83,6 +83,7 @@ class ItemAdmin(StaffModelAdmin):
admin.site.register(Item, ItemAdmin)
admin.site.register(Category, StaffModelAdmin)
admin.site.register(LabelStyle, StaffModelAdmin)
from django.contrib.auth.models import User
from django.contrib.auth.models import Group

View File

@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uuid
from django.db import migrations, models
import django.db.models.deletion
def create_default_label(apps, schema_editor):
LabelStyle = apps.get_model("storage", "LabelStyle")
LabelStyle.objects.create(
old_name="basic_99012_v1",
description="Basic Dymo 89x36mm label",
length=89,
width=36,
)
def fix_label_styles(apps, schema_editor):
Label = apps.get_model("storage", "Label")
LabelStyle = apps.get_model("storage", "LabelStyle")
style = LabelStyle.objects.get(old_name="basic_99012_v1")
for label in Label.objects.all():
if label.style == "basic_99012_v1":
label.style = style.uuid
label.save()
class Migration(migrations.Migration):
dependencies = [
("storage", "0006_category_icon_id"),
]
operations = [
# First set length to 36, to accomodate for UUIDs
migrations.AlterField(
model_name="label",
name="style",
field=models.CharField(max_length=36),
),
migrations.CreateModel(
name="LabelStyle",
fields=[
(
"uuid",
models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False,
serialize=False,
),
),
("old_name", models.CharField(max_length=64)),
("description", models.CharField(max_length=64)),
("length", models.PositiveIntegerField()),
("width", models.PositiveIntegerField()),
],
),
# Create default label, equivalent to old basic_99012_v1 style
migrations.RunPython(create_default_label),
migrations.RunPython(fix_label_styles),
migrations.AlterField(
model_name="label",
name="style",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="storage.LabelStyle"
),
),
]

View File

@ -97,12 +97,21 @@ class ItemImage(models.Model):
return '{}'.format(self.image.name)
class LabelStyle(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
old_name = models.CharField(max_length=64, editable=False, blank=True)
description = models.CharField(max_length=64)
length = models.PositiveIntegerField()
width = models.PositiveIntegerField()
def __str__(self):
return self.description
class Label(models.Model):
id = models.CharField(max_length=64, primary_key=True)
item = models.ForeignKey(Item, related_name='labels')
style = models.CharField(max_length=32, choices=(
('basic_99012_v1', 'Basic Dymo 89x36mm label'),
), default='basic_99012_v1')
style = models.ForeignKey(LabelStyle)
created = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):

View File

@ -1,4 +1,4 @@
from storage.models import Item, Label
from storage.models import Item, Label, LabelStyle
from rest_framework import serializers
from rest_framework_hstore.serializers import HStoreSerializer
@ -8,9 +8,17 @@ class ItemSerializer(HStoreSerializer):
model = Item
fields = ('uuid', 'name', 'description', 'props', 'state', 'parent')
class LabelStyleSerializer(serializers.ModelSerializer):
class Meta:
model = LabelStyle
fields = ('uuid', 'description', 'length', 'width')
class LabelSerializer(serializers.ModelSerializer):
item = ItemSerializer(required=False)
item_id = serializers.PrimaryKeyRelatedField(queryset=Item.objects, source='item')
style = LabelStyleSerializer(required=True)
class Meta:
model = Label
fields = ('id', 'item', 'item_id', 'style')