diff --git a/ram/consist/migrations/0004_alter_consist_company.py b/ram/consist/migrations/0004_alter_consist_company.py new file mode 100644 index 0000000..b887c87 --- /dev/null +++ b/ram/consist/migrations/0004_alter_consist_company.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.6 on 2022-07-15 16:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('metadata', '0004_alter_rollingstocktype_options_and_more'), + ('consist', '0003_consist_image'), + ] + + operations = [ + migrations.AlterField( + model_name='consist', + name='company', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='metadata.company'), + ), + ] diff --git a/ram/consist/models.py b/ram/consist/models.py index 15e3ae2..112178a 100644 --- a/ram/consist/models.py +++ b/ram/consist/models.py @@ -13,9 +13,7 @@ class Consist(models.Model): consist_address = models.SmallIntegerField( default=None, null=True, blank=True ) - company = models.ForeignKey( - Company, on_delete=models.CASCADE, null=True, blank=True - ) + company = models.ForeignKey(Company, on_delete=models.CASCADE) era = models.CharField(max_length=32, blank=True) image = models.ImageField(upload_to="images/", null=True, blank=True) notes = models.TextField(blank=True) diff --git a/ram/portal/views.py b/ram/portal/views.py index 8469407..3a16848 100644 --- a/ram/portal/views.py +++ b/ram/portal/views.py @@ -18,7 +18,7 @@ def order_by_fields(): fields = ["rolling_class__type", "rolling_class__company", "rolling_class__identifier", - "road_number"] + "road_number_cleaned"] if order_by == "type": return (fields[0], fields[1], fields[2], fields[3]) diff --git a/ram/roster/migrations/0008_rollingstock_road_number_cleaned.py b/ram/roster/migrations/0008_rollingstock_road_number_cleaned.py new file mode 100644 index 0000000..2dcb5bb --- /dev/null +++ b/ram/roster/migrations/0008_rollingstock_road_number_cleaned.py @@ -0,0 +1,34 @@ +# Generated by Django 4.0.6 on 2022-07-15 15:55 + +from django.db import migrations, models + + +def gen_road_number_cleaned(apps, schema_editor): + RollingStock = apps.get_model('roster', 'RollingStock') + for row in RollingStock.objects.all(): + row.road_number_cleaned = row.road_number.lstrip('#').lstrip('0') + row.save(update_fields=['road_number_cleaned']) + + +class Migration(migrations.Migration): + + dependencies = [ + ('roster', '0007_alter_rollingclass_company_alter_rollingclass_type'), + ] + + operations = [ + migrations.AddField( + model_name='rollingstock', + name='road_number_cleaned', + field=models.CharField(default='', max_length=128), + preserve_default=False, + ), + migrations.RunPython( + gen_road_number_cleaned, + reverse_code=migrations.RunPython.noop + ), + migrations.AlterModelOptions( + name='rollingstock', + options={'ordering': ['rolling_class', 'road_number_cleaned'], 'verbose_name_plural': 'Rolling stock'}, + ), + ] diff --git a/ram/roster/models.py b/ram/roster/models.py index 5a83c20..13741be 100644 --- a/ram/roster/models.py +++ b/ram/roster/models.py @@ -2,9 +2,9 @@ import os from uuid import uuid4 from django.db import models from django.urls import reverse +from django.dispatch import receiver # from django.core.files.storage import FileSystemStorage -# from django.dispatch import receiver from ram.utils import get_image_preview from metadata.models import ( @@ -75,6 +75,7 @@ class RollingStock(models.Model): verbose_name="Class", ) road_number = models.CharField(max_length=128, unique=False) + road_number_cleaned = models.CharField(max_length=128, unique=False) manufacturer = models.ForeignKey( Manufacturer, on_delete=models.CASCADE, @@ -99,7 +100,7 @@ class RollingStock(models.Model): updated_time = models.DateTimeField(auto_now=True) class Meta: - ordering = ["rolling_class", "road_number"] + ordering = ["rolling_class", "road_number_cleaned"] verbose_name_plural = "Rolling stock" def __str__(self): @@ -115,6 +116,11 @@ class RollingStock(models.Model): return str(self.rolling_class.company) +@receiver(models.signals.pre_save, sender=RollingStock) +def pre_save_running_number(sender, instance, *args, **kwargs): + instance.road_number_cleaned = instance.road_number.lstrip("#").lstrip("0") + + class RollingStockDocument(models.Model): rolling_stock = models.ForeignKey( RollingStock, on_delete=models.CASCADE, related_name="document"