diff --git a/scipost_django/journals/admin.py b/scipost_django/journals/admin.py index 830637dbcdce5f99b87090f58b12a3a6a200aa3f..d21521abbf64c2b7e69c25385f55d65ae93315a3 100644 --- a/scipost_django/journals/admin.py +++ b/scipost_django/journals/admin.py @@ -45,7 +45,17 @@ class JournalAdmin(admin.ModelAdmin): AutogeneratedFileContentTemplateInline, ] - + # Filter `alternative_journals` to include only ones: + # - in the same academic field as the current journal + # - that are active + def formfield_for_manytomany(self, db_field, request, **kwargs): + if db_field.name == "alternative_journals": + journal_id = request.resolver_match.kwargs["object_id"] + journal = Journal.objects.get(pk=journal_id) + kwargs["queryset"] = Journal.objects.filter( + active=True, college__acad_field=journal.college.acad_field + ).exclude(pk=journal_id) + return super().formfield_for_manytomany(db_field, request, **kwargs) @admin.register(Volume) @@ -53,8 +63,6 @@ class VolumeAdmin(admin.ModelAdmin): list_display = ["__str__", "doi_string"] - - @admin.register(Issue) class IssueAdmin(admin.ModelAdmin): list_display = ["__str__", "doi_string"] @@ -65,8 +73,6 @@ class IssueAdmin(admin.ModelAdmin): ] - - class ReferenceInline(admin.TabularInline): model = Reference extra = 0 @@ -122,8 +128,6 @@ class PublicationAdmin(admin.ModelAdmin): ] - - class PublicationProxyMetadata(Publication): search_fields = ["title", "author_list", "doi_label"] list_display = [ @@ -155,8 +159,6 @@ class PublicationProxyMetadataAdmin(admin.ModelAdmin): ] - - @admin.register(Deposit) class DepositAdmin(admin.ModelAdmin): list_display = ( @@ -183,8 +185,6 @@ class DepositAdmin(admin.ModelAdmin): return False - - @admin.register(DOAJDeposit) class DOAJDepositAdmin(admin.ModelAdmin): autocomplete_fields = [ @@ -192,8 +192,6 @@ class DOAJDepositAdmin(admin.ModelAdmin): ] - - admin.site.register(GenericDOIDeposit) diff --git a/scipost_django/journals/migrations/0134_journal_alternative_journals.py b/scipost_django/journals/migrations/0134_journal_alternative_journals.py new file mode 100644 index 0000000000000000000000000000000000000000..787bab5db6e16eda78314fb8d7bb7e4283286e2f --- /dev/null +++ b/scipost_django/journals/migrations/0134_journal_alternative_journals.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.10 on 2024-08-05 12:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("journals", "0133_alter_volume_doi_label"), + ] + + operations = [ + migrations.AddField( + model_name="journal", + name="alternative_journals", + field=models.ManyToManyField(to="journals.journal"), + ), + ] diff --git a/scipost_django/journals/models/journal.py b/scipost_django/journals/models/journal.py index 173775b2f05ceb58bc4b134c7473a15430475a12..8a34188b7534950c18c69ded6e5e0a4bd79ea718 100644 --- a/scipost_django/journals/models/journal.py +++ b/scipost_django/journals/models/journal.py @@ -145,6 +145,8 @@ class Journal(models.Model): blank=True, ) + alternative_journals = models.ManyToManyField("self") + # Cost per publication information cost_info = models.JSONField(default=cost_default_value)