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:
@@ -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(
|
||||
max_length=2,
|
||||
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_extended = models.TextField(blank=True)
|
||||
|
@@ -10,7 +10,7 @@
|
||||
<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 %}
|
||||
<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 %}
|
||||
<p class="card-text"><small>Tags:</small>
|
||||
{% 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
|
||||
|
||||
|
||||
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):
|
||||
def get(self, request, page=1):
|
||||
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)
|
||||
|
||||
try:
|
||||
@@ -59,7 +75,9 @@ class GetHomeFiltered(View):
|
||||
query = Q(scale__scale__icontains=search)
|
||||
else:
|
||||
raise Http404
|
||||
rolling_stock = RollingStock.objects.filter(query)
|
||||
rolling_stock = (
|
||||
RollingStock.objects.filter(query).order_by(*order_by_fields())
|
||||
)
|
||||
matches = len(rolling_stock)
|
||||
paginator = Paginator(rolling_stock, site_conf.items_per_page)
|
||||
|
||||
|
Reference in New Issue
Block a user