mirror of
https://github.com/daniviga/django-ram.git
synced 2025-12-26 07:18:32 +01:00
Extend search to catalogs and scales
This commit is contained in:
@@ -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"),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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__)
|
||||||
|
|||||||
Reference in New Issue
Block a user