diff --git a/ram/bookshelf/migrations/0029_alter_catalog_manufacturer_alter_catalog_scales.py b/ram/bookshelf/migrations/0029_alter_catalog_manufacturer_alter_catalog_scales.py new file mode 100644 index 0000000..743cb88 --- /dev/null +++ b/ram/bookshelf/migrations/0029_alter_catalog_manufacturer_alter_catalog_scales.py @@ -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"), + ), + ] diff --git a/ram/bookshelf/models.py b/ram/bookshelf/models.py index f3b5f36..0fb498f 100644 --- a/ram/bookshelf/models.py +++ b/ram/bookshelf/models.py @@ -129,9 +129,10 @@ class Catalog(BaseBook): manufacturer = models.ForeignKey( Manufacturer, on_delete=models.CASCADE, + related_name="catalogs", ) years = models.CharField(max_length=12) - scales = models.ManyToManyField(Scale) + scales = models.ManyToManyField(Scale, related_name="catalogs") class Meta: ordering = ["manufacturer", "publication_year"] diff --git a/ram/portal/views.py b/ram/portal/views.py index 5e059a5..0691ea2 100644 --- a/ram/portal/views.py +++ b/ram/portal/views.py @@ -204,7 +204,7 @@ class SearchObjects(View): for item in list(chain(books, catalogs)): data.append( { - "type": "book", + "type": item._meta.model_name, "label": item._meta.object_name, "item": item, } @@ -312,12 +312,25 @@ class GetManufacturerItem(View): .distinct() .order_by(*get_order_by_field()) ) + catalogs = Catalog.objects.get_published(request.user).filter( + manufacturer=manufacturer + ) title = "Manufacturer: {0}".format(manufacturer) data = [] for item in roster: 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()) data = paginator.get_page(page) page_range = paginator.get_elided_page_range( @@ -370,6 +383,21 @@ class GetObjectsFiltered(View): for item in roster: 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 consists = ( Consist.objects.get_published(request.user) @@ -392,7 +420,7 @@ class GetObjectsFiltered(View): for item in list(chain(books, catalogs)): data.append( { - "type": "book", + "type": item._meta.model_name, "label": item._meta.object_name, "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") ) @@ -655,8 +702,15 @@ class Scales(GetData): ), 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") ) diff --git a/ram/ram/__init__.py b/ram/ram/__init__.py index 35e25c3..aca62ab 100644 --- a/ram/ram/__init__.py +++ b/ram/ram/__init__.py @@ -1,4 +1,4 @@ from ram.utils import git_suffix -__version__ = "0.18.6" +__version__ = "0.18.7" __version__ += git_suffix(__file__)