From e3da5d05d45d4b3dc8df2b92ae1b790448a6f49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Sat, 2 Apr 2022 21:37:16 +0200 Subject: [PATCH] Fix the API --- dcc/dcc/settings.py | 1 + dcc/metadata/admin.py | 5 ++-- ...ny_options_alter_scale_options_and_more.py | 26 +++++++++++++++++++ .../0004_company_freelance_decoder_sound.py | 23 ++++++++++++++++ ...r_company_freelance_alter_decoder_sound.py | 23 ++++++++++++++++ dcc/metadata/models.py | 8 +++++- dcc/metadata/serializers.py | 22 +++++++++++++++- dcc/roster/admin.py | 9 ++++--- .../0003_rollingstockimage_description.py | 18 +++++++++++++ ..._rollingstockimage_description_and_more.py | 22 ++++++++++++++++ dcc/roster/models.py | 1 + dcc/roster/serializers.py | 18 ++++++++++--- 12 files changed, 166 insertions(+), 10 deletions(-) create mode 100644 dcc/metadata/migrations/0003_alter_company_options_alter_scale_options_and_more.py create mode 100644 dcc/metadata/migrations/0004_company_freelance_decoder_sound.py create mode 100644 dcc/metadata/migrations/0005_alter_company_freelance_alter_decoder_sound.py create mode 100644 dcc/roster/migrations/0003_rollingstockimage_description.py create mode 100644 dcc/roster/migrations/0004_remove_rollingstockimage_description_and_more.py diff --git a/dcc/dcc/settings.py b/dcc/dcc/settings.py index 3475115..a1f3046 100644 --- a/dcc/dcc/settings.py +++ b/dcc/dcc/settings.py @@ -152,6 +152,7 @@ DECODER_INTERFACES = [ ROLLING_STOCK_TYPES = [ ("engine", "Engine"), ("car", "Car"), + ("railcar", "Railcar"), ("equipment", "Equipment"), ("other", "Other") ] diff --git a/dcc/metadata/admin.py b/dcc/metadata/admin.py index 119d02b..7d01f4e 100644 --- a/dcc/metadata/admin.py +++ b/dcc/metadata/admin.py @@ -31,9 +31,10 @@ class ManufacturerAdmin(admin.ModelAdmin): @admin.register(Tag) class TagAdmin(admin.ModelAdmin): readonly_fields = ('slug',) + list_display = ('name', 'slug') @admin.register(RollingStockType) class RollingStockTypeAdmin(admin.ModelAdmin): - list_display = ('type', 'category') - list_filter = list_display + list_display = ('__str__',) + list_filter = ('type', 'category') diff --git a/dcc/metadata/migrations/0003_alter_company_options_alter_scale_options_and_more.py b/dcc/metadata/migrations/0003_alter_company_options_alter_scale_options_and_more.py new file mode 100644 index 0000000..9bd9674 --- /dev/null +++ b/dcc/metadata/migrations/0003_alter_company_options_alter_scale_options_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 4.0.2 on 2022-04-02 17:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('metadata', '0002_scale_manufacturer_website_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='company', + options={'ordering': ['name'], 'verbose_name_plural': 'Companies'}, + ), + migrations.AlterModelOptions( + name='scale', + options={'ordering': ['scale']}, + ), + migrations.AlterField( + model_name='rollingstocktype', + name='category', + field=models.CharField(choices=[('engine', 'Engine'), ('car', 'Car'), ('railcar', 'Railcar'), ('equipment', 'Equipment'), ('other', 'Other')], max_length=64), + ), + ] diff --git a/dcc/metadata/migrations/0004_company_freelance_decoder_sound.py b/dcc/metadata/migrations/0004_company_freelance_decoder_sound.py new file mode 100644 index 0000000..2d32053 --- /dev/null +++ b/dcc/metadata/migrations/0004_company_freelance_decoder_sound.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.2 on 2022-04-02 17:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('metadata', '0003_alter_company_options_alter_scale_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='freelance', + field=models.BooleanField(blank=True, default=False, null=True), + ), + migrations.AddField( + model_name='decoder', + name='sound', + field=models.BooleanField(blank=True, default=False, null=True), + ), + ] diff --git a/dcc/metadata/migrations/0005_alter_company_freelance_alter_decoder_sound.py b/dcc/metadata/migrations/0005_alter_company_freelance_alter_decoder_sound.py new file mode 100644 index 0000000..215e18d --- /dev/null +++ b/dcc/metadata/migrations/0005_alter_company_freelance_alter_decoder_sound.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.2 on 2022-04-02 17:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('metadata', '0004_company_freelance_decoder_sound'), + ] + + operations = [ + migrations.AlterField( + model_name='company', + name='freelance', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='decoder', + name='sound', + field=models.BooleanField(default=False), + ), + ] diff --git a/dcc/metadata/models.py b/dcc/metadata/models.py index 47d6576..8b2ede8 100644 --- a/dcc/metadata/models.py +++ b/dcc/metadata/models.py @@ -26,6 +26,7 @@ class Company(models.Model): name = models.CharField(max_length=64, unique=True) extended_name = models.CharField(max_length=128, blank=True) country = CountryField() + freelance = models.BooleanField(default=False) logo = models.ImageField( upload_to='images/', null=True, @@ -33,6 +34,7 @@ class Company(models.Model): class Meta: verbose_name_plural = "Companies" + ordering = ['name'] def __str__(self): return self.name @@ -53,6 +55,7 @@ class Decoder(models.Model): null=True, blank=True ) + sound = models.BooleanField(default=False) image = models.ImageField( upload_to='images/', null=True, @@ -71,6 +74,9 @@ class Scale(models.Model): ratio = models.CharField(max_length=16, blank=True) gauge = models.CharField(max_length=16, blank=True) + class Meta: + ordering = ['scale'] + def __str__(self): return str(self.scale) @@ -97,4 +103,4 @@ class RollingStockType(models.Model): unique_together = ('category', 'type') def __str__(self): - return "{0}".format(self.type) + return "{0} {1}".format(self.type, self.category) diff --git a/dcc/metadata/serializers.py b/dcc/metadata/serializers.py index d63fb3c..596ba2a 100644 --- a/dcc/metadata/serializers.py +++ b/dcc/metadata/serializers.py @@ -1,5 +1,13 @@ from rest_framework import serializers -from metadata.models import Manufacturer, Company, Decoder +from metadata.models import ( + RollingStockType, Scale, Manufacturer, + Company, Decoder, Tag) + + +class RollingStockTypeSerializer(serializers.ModelSerializer): + class Meta: + model = RollingStockType + fields = "__all__" class ManufacturerSerializer(serializers.ModelSerializer): @@ -8,6 +16,12 @@ class ManufacturerSerializer(serializers.ModelSerializer): fields = "__all__" +class ScaleSerializer(serializers.ModelSerializer): + class Meta: + model = Scale + fields = "__all__" + + class CompanySerializer(serializers.ModelSerializer): class Meta: model = Company @@ -20,3 +34,9 @@ class DecoderSerializer(serializers.ModelSerializer): class Meta: model = Decoder fields = "__all__" + + +class TagSerializer(serializers.ModelSerializer): + class Meta: + model = Tag + fields = "__all__" diff --git a/dcc/roster/admin.py b/dcc/roster/admin.py index f295015..7acc238 100644 --- a/dcc/roster/admin.py +++ b/dcc/roster/admin.py @@ -6,7 +6,7 @@ from roster.models import ( @admin.register(RollingClass) class RollingClass(admin.ModelAdmin): list_display = ('__str__', 'type', 'company') - list_filter = ('type', 'company') + list_filter = ('company', 'type__category', 'type') search_fields = list_display @@ -28,8 +28,11 @@ class RollingStockAdmin(admin.ModelAdmin): inlines = (RollingStockImageInline, RollingStockDocInline) readonly_fields = ('creation_time', 'updated_time') list_display = ( - '__str__', 'manufacturer', 'scale', 'sku', 'company', 'country') - list_filter = ('manufacturer', 'scale') + '__str__', 'address', 'manufacturer', + 'scale', 'sku', 'company', 'country') + list_filter = ( + 'rolling_class__type__category', 'rolling_class__type', + 'scale', 'manufacturer') search_fields = list_display fieldsets = ( diff --git a/dcc/roster/migrations/0003_rollingstockimage_description.py b/dcc/roster/migrations/0003_rollingstockimage_description.py new file mode 100644 index 0000000..7d991e1 --- /dev/null +++ b/dcc/roster/migrations/0003_rollingstockimage_description.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.2 on 2022-04-02 17:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('roster', '0002_rename_class_rollingclass_alter_rollingclass_options_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='rollingstockimage', + name='description', + field=models.CharField(blank=True, max_length=256), + ), + ] diff --git a/dcc/roster/migrations/0004_remove_rollingstockimage_description_and_more.py b/dcc/roster/migrations/0004_remove_rollingstockimage_description_and_more.py new file mode 100644 index 0000000..ca7dd75 --- /dev/null +++ b/dcc/roster/migrations/0004_remove_rollingstockimage_description_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 4.0.2 on 2022-04-02 17:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('roster', '0003_rollingstockimage_description'), + ] + + operations = [ + migrations.RemoveField( + model_name='rollingstockimage', + name='description', + ), + migrations.AddField( + model_name='rollingclass', + name='description', + field=models.CharField(blank=True, max_length=256), + ), + ] diff --git a/dcc/roster/models.py b/dcc/roster/models.py index 2875f3c..df1aa80 100644 --- a/dcc/roster/models.py +++ b/dcc/roster/models.py @@ -20,6 +20,7 @@ class RollingClass(models.Model): type = models.ForeignKey( RollingStockType, on_delete=models.CASCADE, null=True, blank=True) + description = models.CharField(max_length=256, blank=True) company = models.ForeignKey( Company, on_delete=models.CASCADE, null=True, blank=True) diff --git a/dcc/roster/serializers.py b/dcc/roster/serializers.py index 1d345ee..3288ca0 100644 --- a/dcc/roster/serializers.py +++ b/dcc/roster/serializers.py @@ -1,13 +1,25 @@ from rest_framework import serializers -from roster.models import RollingStock +from roster.models import RollingClass, RollingStock from metadata.serializers import ( - ManufacturerSerializer, CompanySerializer, DecoderSerializer) + RollingStockTypeSerializer, ManufacturerSerializer, ScaleSerializer, + CompanySerializer, DecoderSerializer, TagSerializer) + + +class RollingClassSerializer(serializers.ModelSerializer): + company = CompanySerializer() + type = RollingStockTypeSerializer() + + class Meta: + model = RollingClass + fields = "__all__" class RollingStockSerializer(serializers.ModelSerializer): + rolling_class = RollingClassSerializer() manufacturer = ManufacturerSerializer() decoder = DecoderSerializer() - company = CompanySerializer() + scale = ScaleSerializer() + tags = TagSerializer(many=True) class Meta: model = RollingStock