Improve road number sorting and enforce company on consists

This commit is contained in:
2022-07-15 18:10:18 +02:00
parent e55f953c8a
commit 70c12c69b2
5 changed files with 64 additions and 6 deletions

View File

@@ -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'},
),
]

View File

@@ -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"