Give label styles their own model.
parent
7c267dc4be
commit
d44df4cc45
|
@ -4,7 +4,7 @@ from django.contrib import admin
|
||||||
from django_select2.forms import ModelSelect2Widget, Select2MultipleWidget
|
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
|
from .widgets import ItemSelectWidget, PropsSelectWidget
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ class ItemAdmin(StaffModelAdmin):
|
||||||
|
|
||||||
admin.site.register(Item, ItemAdmin)
|
admin.site.register(Item, ItemAdmin)
|
||||||
admin.site.register(Category, StaffModelAdmin)
|
admin.site.register(Category, StaffModelAdmin)
|
||||||
|
admin.site.register(LabelStyle, StaffModelAdmin)
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
|
|
|
@ -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"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -97,12 +97,21 @@ class ItemImage(models.Model):
|
||||||
return '{}'.format(self.image.name)
|
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):
|
class Label(models.Model):
|
||||||
id = models.CharField(max_length=64, primary_key=True)
|
id = models.CharField(max_length=64, primary_key=True)
|
||||||
item = models.ForeignKey(Item, related_name='labels')
|
item = models.ForeignKey(Item, related_name='labels')
|
||||||
style = models.CharField(max_length=32, choices=(
|
style = models.ForeignKey(LabelStyle)
|
||||||
('basic_99012_v1', 'Basic Dymo 89x36mm label'),
|
|
||||||
), default='basic_99012_v1')
|
|
||||||
created = models.DateTimeField(auto_now_add=True, blank=True)
|
created = models.DateTimeField(auto_now_add=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
|
@ -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 import serializers
|
||||||
from rest_framework_hstore.serializers import HStoreSerializer
|
from rest_framework_hstore.serializers import HStoreSerializer
|
||||||
|
|
||||||
|
@ -8,9 +8,17 @@ class ItemSerializer(HStoreSerializer):
|
||||||
model = Item
|
model = Item
|
||||||
fields = ('uuid', 'name', 'description', 'props', 'state', 'parent')
|
fields = ('uuid', 'name', 'description', 'props', 'state', 'parent')
|
||||||
|
|
||||||
|
|
||||||
|
class LabelStyleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = LabelStyle
|
||||||
|
fields = ('uuid', 'description', 'length', 'width')
|
||||||
|
|
||||||
|
|
||||||
class LabelSerializer(serializers.ModelSerializer):
|
class LabelSerializer(serializers.ModelSerializer):
|
||||||
item = ItemSerializer(required=False)
|
item = ItemSerializer(required=False)
|
||||||
item_id = serializers.PrimaryKeyRelatedField(queryset=Item.objects, source='item')
|
item_id = serializers.PrimaryKeyRelatedField(queryset=Item.objects, source='item')
|
||||||
|
style = LabelStyleSerializer(required=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Label
|
model = Label
|
||||||
fields = ('id', 'item', 'item_id', 'style')
|
fields = ('id', 'item', 'item_id', 'style')
|
||||||
|
|
Loading…
Reference in New Issue