diff --git a/submissions/admin.py b/submissions/admin.py index 46f4227301496ef2d9341cdeecec6593c549ab6e..78dcb301f7517a454584ca5bbf6d883b6060599e 100644 --- a/submissions/admin.py +++ b/submissions/admin.py @@ -20,7 +20,12 @@ def submission_short_title(obj): return obj.submission.title[:30] -admin.site.register(PreprintServer) +class PreprintServerAdmin(admin.ModelAdmin): + autocomplete_fields = [ + 'acad_fields' + ] + +admin.site.register(PreprintServer, PreprintServerAdmin) class iThenticateReportAdmin(admin.ModelAdmin): diff --git a/submissions/migrations/0098_preprintserver_acad_fields.py b/submissions/migrations/0098_preprintserver_acad_fields.py new file mode 100644 index 0000000000000000000000000000000000000000..69e555b66146b97d889f80bd63e6358b4a050816 --- /dev/null +++ b/submissions/migrations/0098_preprintserver_acad_fields.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.16 on 2020-09-29 07:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ontology', '0007_Branch_Field_Specialty'), + ('submissions', '0097_remove_submission_secondary_areas'), + ] + + operations = [ + migrations.AddField( + model_name='preprintserver', + name='acad_fields', + field=models.ManyToManyField(blank=True, related_name='preprint_servers', to='ontology.AcademicField'), + ), + ] diff --git a/submissions/migrations/0099_populate_preprint_server_acad_fields.py b/submissions/migrations/0099_populate_preprint_server_acad_fields.py new file mode 100644 index 0000000000000000000000000000000000000000..cae3386f4478245e1482306bee12e3be248143d6 --- /dev/null +++ b/submissions/migrations/0099_populate_preprint_server_acad_fields.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.16 on 2020-09-29 07:57 + +from django.db import migrations + + +def populate_acad_fields(apps, schema_editor): + PreprintServer = apps.get_model('submissions.PreprintServer') + AcademicField = apps.get_model('ontology', 'AcademicField') + + for ps in PreprintServer.objects.all(): + ps.acad_fields.set(AcademicField.objects.filter(slug__in=ps.disciplines)) + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', '0098_preprintserver_acad_fields'), + ] + + operations = [ + migrations.RunPython(populate_acad_fields, + reverse_code=migrations.RunPython.noop), + ] diff --git a/submissions/migrations/0100_remove_preprintserver_disciplines.py b/submissions/migrations/0100_remove_preprintserver_disciplines.py new file mode 100644 index 0000000000000000000000000000000000000000..9979edddd1afc178cd4627c25228e317669cf50c --- /dev/null +++ b/submissions/migrations/0100_remove_preprintserver_disciplines.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.16 on 2020-09-29 08:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', '0099_populate_preprint_server_acad_fields'), + ] + + operations = [ + migrations.RemoveField( + model_name='preprintserver', + name='disciplines', + ), + ] diff --git a/submissions/models/preprint_server.py b/submissions/models/preprint_server.py index 801d363d523b7dd19046f2b73660a69fe1e81578..1bc91b5489cfacbfb42d733ad0f30002f154fd84 100644 --- a/submissions/models/preprint_server.py +++ b/submissions/models/preprint_server.py @@ -4,9 +4,6 @@ __license__ = "AGPL v3" from django.db import models -from scipost.constants import SCIPOST_DISCIPLINES -from scipost.fields import ChoiceArrayField - class PreprintServer(models.Model): """ @@ -14,8 +11,10 @@ class PreprintServer(models.Model): """ name = models.CharField(max_length=256) url = models.URLField() - disciplines = ChoiceArrayField( - models.CharField(max_length=32, choices=SCIPOST_DISCIPLINES) + acad_fields = models.ManyToManyField( + 'ontology.AcademicField', + blank=True, + related_name='preprint_servers' ) class Meta: diff --git a/submissions/views.py b/submissions/views.py index d8a7966d066415f7629f241782465b2bc8d677ef..f7743345d2fd648e0d0d627cd2628d4243e91660 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -159,7 +159,7 @@ def submit_choose_preprint_server(request, journal_doi_label): Choose a preprint server. If `thread_hash` is given as a GET parameter, this is a resubmission. """ journal = get_object_or_404(Journal, doi_label=journal_doi_label) - preprint_servers = PreprintServer.objects.filter(disciplines__contains=[journal.discipline]) + preprint_servers = PreprintServer.objects.filter(acad_fields=journal.college.acad_field) thread_hash = request.GET.get('thread_hash') or None # Each integrated preprint server has a prefill form: scipost_prefill_form = SciPostPrefillForm(