diff --git a/journals/behaviors.py b/journals/behaviors.py index dd9e5f253b3391d7c19672fbbe9b4978a2c7ae27..b3c87c62e2df9e565bf9f34e4e7243c5812ee25e 100644 --- a/journals/behaviors.py +++ b/journals/behaviors.py @@ -11,7 +11,7 @@ doi_journal_validator = RegexValidator(r'^[a-zA-Z]+$', 'Only valid DOI expressions are allowed ([a-zA-Z]+).') doi_volume_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+$', 'Only valid DOI expressions are allowed ([a-zA-Z]+.[0-9]+).') -doi_issue_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+.[0-9]+$', +doi_issue_validator = RegexValidator(r'^[a-zA-Z]+(.[0-9]+)?.[0-9]+$', ('Only valid DOI expressions are allowed ' '([a-zA-Z]+.[0-9]+.[0-9]+).')) doi_publication_validator = RegexValidator( diff --git a/journals/models.py b/journals/models.py index 6f2cd352eb0690069008f865f12b0c10c21b6b0a..c3bc890559164b1f7c40d59b77166fcd9ef17d46 100644 --- a/journals/models.py +++ b/journals/models.py @@ -310,7 +310,7 @@ class Issue(models.Model): def issue_number(self): if self.in_volume: return '%s issue %s' % (self.in_volume, self.number) - return self.short_str + return '%s issue %s' % (self.in_journal, self.number) @property def short_str(self): diff --git a/journals/views.py b/journals/views.py index d4a59d242916b45a98b900e59cedcd3f66ff4706..7be959ac2f5e1ba43bb3915392ec0f80c2490fe0 100644 --- a/journals/views.py +++ b/journals/views.py @@ -24,7 +24,6 @@ from django.db.models import Q from django.http import Http404, HttpResponse from django.utils import timezone from django.utils.decorators import method_decorator -from django.views.generic.base import TemplateView from django.views.generic.detail import DetailView from django.views.generic.edit import UpdateView from django.views.generic.list import ListView @@ -1231,8 +1230,8 @@ def publication_detail(request, doi_label): The actual Publication detail page. This is visible for everyone if published or visible for Production Supervisors and Administrators if in draft. """ - publication = get_object_or_404(Publication, doi_label=doi_label) - if not publication.is_published and not publication.status == PUBLICATION_PREPUBLISHED: + publication = Publication.objects.get(doi_label=doi_label) + if not publication.is_published and not publication.status == PUBLICATION_PREPUBLISHED: if not request.user.has_perm('scipost.can_draft_publication'): raise Http404('Publication is not publicly visible') diff --git a/proceedings/models.py b/proceedings/models.py index c2809ff46a4af2a3678de994ae03da01c89380c7..47c99fdd52f1d691629429687947622685ab969a 100644 --- a/proceedings/models.py +++ b/proceedings/models.py @@ -18,9 +18,9 @@ class Proceedings(TimeStampedModel): A Proceeding is a special kind of Journal Issue. """ # Link to the actual Journal platform - issue = models.OneToOneField('journals.Issue', related_name='proceedings', - limit_choices_to={ - 'in_volume__in_journal__name': 'SciPostPhysProc'}) + issue = models.OneToOneField( + 'journals.Issue', related_name='proceedings', + limit_choices_to=models.Q(in_volume__in_journal__name='SciPostPhysProc') | models.Q(in_journal__name='SciPostPhysProc')) # Event the Proceedings is for event_name = models.CharField(max_length=256, blank=True) diff --git a/scipost/urls.py b/scipost/urls.py index e6e4183ba01daeb61f30a4510e5a6186a8c7f0fc..99c22a9161976f66a7b4fd7e23a8a97fa6d6f5b7 100644 --- a/scipost/urls.py +++ b/scipost/urls.py @@ -207,9 +207,9 @@ urlpatterns = [ name='publication_pdf'), # Journal issue - url(r'^10.21468/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9])$', + url(r'^10.21468/(?P<doi_label>[a-zA-Z]+(.[0-9]+)?.[0-9])$', journals_views.issue_detail, name='issue_detail'), - url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9])$', + url(r'^(?P<doi_label>[a-zA-Z]+(.[0-9]+)?.[0-9])$', journals_views.issue_detail, name='issue_detail'), # Journal landing page