mirror of
https://github.com/daniviga/django-ram.git
synced 2025-08-04 13:17:50 +02:00
Add sorting, enforce foreign keys
This commit is contained in:
@@ -23,7 +23,7 @@ class Consist(models.Model):
|
|||||||
updated_time = models.DateTimeField(auto_now=True)
|
updated_time = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{0}".format(self.identifier)
|
return "{0} {1}".format(self.company, self.identifier)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse("consist", kwargs={"uuid": self.uuid})
|
return reverse("consist", kwargs={"uuid": self.uuid})
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from adminsortable2.admin import SortableAdminMixin
|
||||||
|
|
||||||
from metadata.models import (
|
from metadata.models import (
|
||||||
Property,
|
Property,
|
||||||
Decoder,
|
Decoder,
|
||||||
@@ -54,7 +56,7 @@ class TagAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
|
|
||||||
@admin.register(RollingStockType)
|
@admin.register(RollingStockType)
|
||||||
class RollingStockTypeAdmin(admin.ModelAdmin):
|
class RollingStockTypeAdmin(SortableAdminMixin, admin.ModelAdmin):
|
||||||
list_display = ("__str__",)
|
list_display = ("__str__",)
|
||||||
list_filter = ("type", "category")
|
list_filter = ("type", "category")
|
||||||
search_fields = list_display
|
search_fields = list_display
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.0.6 on 2022-07-14 14:46
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('metadata', '0003_property_private'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='rollingstocktype',
|
||||||
|
options={'ordering': ['order']},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='rollingstocktype',
|
||||||
|
name='order',
|
||||||
|
field=models.PositiveSmallIntegerField(default=0),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
@@ -108,12 +108,14 @@ def tag_pre_save(sender, instance, **kwargs):
|
|||||||
|
|
||||||
class RollingStockType(models.Model):
|
class RollingStockType(models.Model):
|
||||||
type = models.CharField(max_length=64)
|
type = models.CharField(max_length=64)
|
||||||
|
order = models.PositiveSmallIntegerField()
|
||||||
category = models.CharField(
|
category = models.CharField(
|
||||||
max_length=64, choices=settings.ROLLING_STOCK_TYPES
|
max_length=64, choices=settings.ROLLING_STOCK_TYPES
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
unique_together = ("category", "type")
|
unique_together = ("category", "type")
|
||||||
|
ordering = ["order"]
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{0} {1}".format(self.type, self.category)
|
return "{0} {1}".format(self.type, self.category)
|
||||||
|
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.0.6 on 2022-07-15 12:07
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('portal', '0006_alter_siteconfiguration_site_name'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='siteconfiguration',
|
||||||
|
name='items_ordering',
|
||||||
|
field=models.CharField(choices=[('type', 'By rolling stock type'), ('company', 'By company name'), ('identifier', 'By rolling stock class')], default='type', max_length=10),
|
||||||
|
),
|
||||||
|
]
|
@@ -14,7 +14,14 @@ class SiteConfiguration(SingletonModel):
|
|||||||
items_per_page = models.CharField(
|
items_per_page = models.CharField(
|
||||||
max_length=2,
|
max_length=2,
|
||||||
choices=[(str(x * 3), str(x * 3)) for x in range(2, 11)],
|
choices=[(str(x * 3), str(x * 3)) for x in range(2, 11)],
|
||||||
default="6",
|
default="6"
|
||||||
|
)
|
||||||
|
items_ordering = models.CharField(
|
||||||
|
max_length=10,
|
||||||
|
choices=[("type", "By rolling stock type"),
|
||||||
|
("company", "By company name"),
|
||||||
|
("identifier", "By rolling stock class")],
|
||||||
|
default="type"
|
||||||
)
|
)
|
||||||
footer = models.TextField(blank=True)
|
footer = models.TextField(blank=True)
|
||||||
footer_extended = models.TextField(blank=True)
|
footer_extended = models.TextField(blank=True)
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<div class="card shadow-sm">
|
<div class="card shadow-sm">
|
||||||
{% if c.image %}<a href="{{ c.get_absolute_url }}"><img src="{{ c.image.url }}" alt="Card image cap"></a>{% endif %}
|
{% if c.image %}<a href="{{ c.get_absolute_url }}"><img src="{{ c.image.url }}" alt="Card image cap"></a>{% endif %}
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<p class="card-text"><strong>{{ c.identifier }}</strong></p>
|
<p class="card-text"><strong>{{ c }}</strong></p>
|
||||||
{% if c.tags.all %}
|
{% if c.tags.all %}
|
||||||
<p class="card-text"><small>Tags:</small>
|
<p class="card-text"><small>Tags:</small>
|
||||||
{% for t in c.tags.all %}<span class="badge bg-primary">
|
{% for t in c.tags.all %}<span class="badge bg-primary">
|
||||||
|
@@ -13,10 +13,26 @@ from roster.models import RollingStock
|
|||||||
from consist.models import Consist
|
from consist.models import Consist
|
||||||
|
|
||||||
|
|
||||||
|
def order_by_fields():
|
||||||
|
order_by = get_site_conf().items_ordering
|
||||||
|
fields = ["rolling_class__type",
|
||||||
|
"rolling_class__company",
|
||||||
|
"rolling_class__identifier",
|
||||||
|
"road_number"]
|
||||||
|
|
||||||
|
if order_by == "type":
|
||||||
|
return (fields[0], fields[1], fields[2], fields[3])
|
||||||
|
elif order_by == "company":
|
||||||
|
return (fields[1], fields[0], fields[2], fields[3])
|
||||||
|
elif order_by == "identifier":
|
||||||
|
return (fields[2], fields[0], fields[1], fields[3])
|
||||||
|
|
||||||
|
|
||||||
class GetHome(View):
|
class GetHome(View):
|
||||||
def get(self, request, page=1):
|
def get(self, request, page=1):
|
||||||
site_conf = get_site_conf()
|
site_conf = get_site_conf()
|
||||||
rolling_stock = RollingStock.objects.all()
|
rolling_stock = RollingStock.objects.order_by(*order_by_fields())
|
||||||
|
|
||||||
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -59,7 +75,9 @@ class GetHomeFiltered(View):
|
|||||||
query = Q(scale__scale__icontains=search)
|
query = Q(scale__scale__icontains=search)
|
||||||
else:
|
else:
|
||||||
raise Http404
|
raise Http404
|
||||||
rolling_stock = RollingStock.objects.filter(query)
|
rolling_stock = (
|
||||||
|
RollingStock.objects.filter(query).order_by(*order_by_fields())
|
||||||
|
)
|
||||||
matches = len(rolling_stock)
|
matches = len(rolling_stock)
|
||||||
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
||||||
|
|
||||||
|
@@ -0,0 +1,25 @@
|
|||||||
|
# Generated by Django 4.0.6 on 2022-07-15 15:24
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('metadata', '0004_alter_rollingstocktype_options_and_more'),
|
||||||
|
('roster', '0006_alter_rollingclassproperty_rolling_class_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='rollingclass',
|
||||||
|
name='company',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='metadata.company'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='rollingclass',
|
||||||
|
name='type',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='metadata.rollingstocktype'),
|
||||||
|
),
|
||||||
|
]
|
@@ -25,12 +25,8 @@ from metadata.models import (
|
|||||||
|
|
||||||
class RollingClass(models.Model):
|
class RollingClass(models.Model):
|
||||||
identifier = models.CharField(max_length=128, unique=False)
|
identifier = models.CharField(max_length=128, unique=False)
|
||||||
type = models.ForeignKey(
|
type = models.ForeignKey(RollingStockType, on_delete=models.CASCADE)
|
||||||
RollingStockType, on_delete=models.CASCADE, null=True, blank=True
|
company = models.ForeignKey(Company, on_delete=models.CASCADE)
|
||||||
)
|
|
||||||
company = models.ForeignKey(
|
|
||||||
Company, on_delete=models.CASCADE, null=True, blank=True
|
|
||||||
)
|
|
||||||
description = models.CharField(max_length=256, blank=True)
|
description = models.CharField(max_length=256, blank=True)
|
||||||
manufacturer = models.ForeignKey(
|
manufacturer = models.ForeignKey(
|
||||||
Manufacturer,
|
Manufacturer,
|
||||||
|
Reference in New Issue
Block a user