Extend search to catalogs and scales

This commit is contained in:
2025-12-23 12:19:26 +01:00
parent fb17dc2a7c
commit 98d2e7beab
4 changed files with 90 additions and 6 deletions

View File

@@ -0,0 +1,29 @@
# Generated by Django 6.0 on 2025-12-23 11:18
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("bookshelf", "0028_alter_magazine_options_alter_magazineissue_options"),
("metadata", "0025_alter_company_options_alter_manufacturer_options_and_more"),
]
operations = [
migrations.AlterField(
model_name="catalog",
name="manufacturer",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="catalogs",
to="metadata.manufacturer",
),
),
migrations.AlterField(
model_name="catalog",
name="scales",
field=models.ManyToManyField(related_name="catalogs", to="metadata.scale"),
),
]

View File

@@ -129,9 +129,10 @@ class Catalog(BaseBook):
manufacturer = models.ForeignKey( manufacturer = models.ForeignKey(
Manufacturer, Manufacturer,
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name="catalogs",
) )
years = models.CharField(max_length=12) years = models.CharField(max_length=12)
scales = models.ManyToManyField(Scale) scales = models.ManyToManyField(Scale, related_name="catalogs")
class Meta: class Meta:
ordering = ["manufacturer", "publication_year"] ordering = ["manufacturer", "publication_year"]

View File

@@ -204,7 +204,7 @@ class SearchObjects(View):
for item in list(chain(books, catalogs)): for item in list(chain(books, catalogs)):
data.append( data.append(
{ {
"type": "book", "type": item._meta.model_name,
"label": item._meta.object_name, "label": item._meta.object_name,
"item": item, "item": item,
} }
@@ -312,12 +312,25 @@ class GetManufacturerItem(View):
.distinct() .distinct()
.order_by(*get_order_by_field()) .order_by(*get_order_by_field())
) )
catalogs = Catalog.objects.get_published(request.user).filter(
manufacturer=manufacturer
)
title = "Manufacturer: {0}".format(manufacturer) title = "Manufacturer: {0}".format(manufacturer)
data = [] data = []
for item in roster: for item in roster:
data.append({"type": "roster", "item": item}) data.append({"type": "roster", "item": item})
if catalogs is not None:
for item in catalogs:
data.append(
{
"type": "catalog",
"label": "Catalog",
"item": item,
}
)
paginator = Paginator(data, get_items_per_page()) paginator = Paginator(data, get_items_per_page())
data = paginator.get_page(page) data = paginator.get_page(page)
page_range = paginator.get_elided_page_range( page_range = paginator.get_elided_page_range(
@@ -370,6 +383,21 @@ class GetObjectsFiltered(View):
for item in roster: for item in roster:
data.append({"type": "roster", "item": item}) data.append({"type": "roster", "item": item})
if _filter == "scale":
catalogs = (
Catalog.objects.get_published(request.user)
.filter(scales__slug=search)
.distinct()
)
for item in catalogs:
data.append(
{
"type": "catalog",
"label": "Catalog",
"item": item,
}
)
try: # Execute only if query_2nd is defined try: # Execute only if query_2nd is defined
consists = ( consists = (
Consist.objects.get_published(request.user) Consist.objects.get_published(request.user)
@@ -392,7 +420,7 @@ class GetObjectsFiltered(View):
for item in list(chain(books, catalogs)): for item in list(chain(books, catalogs)):
data.append( data.append(
{ {
"type": "book", "type": item._meta.model_name,
"label": item._meta.object_name, "label": item._meta.object_name,
"item": item, "item": item,
} }
@@ -580,7 +608,26 @@ class Manufacturers(GetData):
) )
) )
) )
.annotate(num_items=F("num_rollingstock") + F("num_rollingclass")) .annotate(
num_catalogs=(
Count(
"catalogs",
filter=Q(
catalogs__in=(
Catalog.objects.get_published(request.user)
),
),
distinct=True,
)
)
)
.annotate(
num_items=(
F("num_rollingstock")
+ F("num_rollingclass")
+ F("num_catalogs")
)
)
.order_by("name") .order_by("name")
) )
@@ -655,8 +702,15 @@ class Scales(GetData):
), ),
distinct=True, distinct=True,
), ),
num_catalogs=Count("catalogs", distinct=True),
)
.annotate(
num_items=(
F("num_rollingstock")
+ F("num_consists")
+ F("num_catalogs")
)
) )
.annotate(num_items=F("num_rollingstock") + F("num_consists"))
.order_by("-ratio_int", "-tracks", "scale") .order_by("-ratio_int", "-tracks", "scale")
) )

View File

@@ -1,4 +1,4 @@
from ram.utils import git_suffix from ram.utils import git_suffix
__version__ = "0.18.6" __version__ = "0.18.7"
__version__ += git_suffix(__file__) __version__ += git_suffix(__file__)