From f5ed95527e1c149fa2b08665cb02244ede35fa53 Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Sat, 26 Nov 2016 09:15:33 +0100 Subject: [PATCH] Prepare upgrade to Django 1.10: on_delete on ForeignKey and OneToOne --- commentaries/models.py | 5 +++-- comments/models.py | 13 +++++++------ journals/models.py | 16 +++++++++------- scipost/models.py | 6 +++--- scipost/urls.py | 2 +- submissions/models.py | 28 +++++++++++++++------------- theses/models.py | 5 +++-- 7 files changed, 41 insertions(+), 34 deletions(-) diff --git a/commentaries/models.py b/commentaries/models.py index f406156ff..694b51c6b 100644 --- a/commentaries/models.py +++ b/commentaries/models.py @@ -19,9 +19,10 @@ class Commentary(models.Model): """ A Commentary contains all the contents of a SciPost Commentary page for a given publication. """ - requested_by = models.ForeignKey (Contributor, blank=True, null=True, related_name='requested_by') + requested_by = models.ForeignKey (Contributor, blank=True, null=True, + on_delete=models.CASCADE, related_name='requested_by') vetted = models.BooleanField(default=False) - vetted_by = models.ForeignKey (Contributor, blank=True, null=True) + vetted_by = models.ForeignKey (Contributor, blank=True, null=True, on_delete=models.CASCADE) type = models.CharField(max_length=9, choices=COMMENTARY_TYPES) # published paper or arxiv preprint discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS) diff --git a/comments/models.py b/comments/models.py index b9189f578..d18801033 100644 --- a/comments/models.py +++ b/comments/models.py @@ -44,15 +44,16 @@ class Comment(models.Model): # -3: rejected (not useful) status = models.SmallIntegerField(default=0) vetted_by = models.ForeignKey(Contributor, blank=True, null=True, + on_delete=models.CASCADE, related_name='comment_vetted_by') # a Comment is either for a Commentary or Submission - commentary = models.ForeignKey(Commentary, blank=True, null=True) - submission = models.ForeignKey(Submission, blank=True, null=True) - thesislink = models.ForeignKey(ThesisLink, blank=True, null=True) + commentary = models.ForeignKey(Commentary, blank=True, null=True, on_delete=models.CASCADE) + submission = models.ForeignKey(Submission, blank=True, null=True, on_delete=models.CASCADE) + thesislink = models.ForeignKey(ThesisLink, blank=True, null=True, on_delete=models.CASCADE) is_author_reply = models.BooleanField(default=False) - in_reply_to_comment = models.ForeignKey('self', blank=True, null=True) - in_reply_to_report = models.ForeignKey(Report, blank=True, null=True) - author = models.ForeignKey(Contributor, default=1) + in_reply_to_comment = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE) + in_reply_to_report = models.ForeignKey(Report, blank=True, null=True, on_delete=models.CASCADE) + author = models.ForeignKey(Contributor, default=1, on_delete=models.CASCADE) anonymous = models.BooleanField(default=False, verbose_name='Publish anonymously') # Categories: is_cor = models.BooleanField(default=False, verbose_name='correction/erratum') diff --git a/journals/models.py b/journals/models.py index 098e58c91..8581d9d79 100644 --- a/journals/models.py +++ b/journals/models.py @@ -114,7 +114,7 @@ class Journal(models.Model): class Volume(models.Model): - in_journal = models.ForeignKey(Journal) + in_journal = models.ForeignKey(Journal, on_delete=models.CASCADE) number = models.PositiveSmallIntegerField(unique=True) start_date = models.DateField(default=timezone.now) until_date = models.DateField(default=timezone.now) @@ -125,7 +125,7 @@ class Volume(models.Model): class Issue(models.Model): - in_volume = models.ForeignKey(Volume) + in_volume = models.ForeignKey(Volume, on_delete=models.CASCADE) number = models.PositiveSmallIntegerField(unique=True) start_date = models.DateField(default=timezone.now) until_date = models.DateField(default=timezone.now) @@ -153,14 +153,15 @@ class Issue(models.Model): class Publication(models.Model): - accepted_submission = models.OneToOneField('submissions.Submission') - in_issue = models.ForeignKey(Issue) + accepted_submission = models.OneToOneField('submissions.Submission', on_delete=models.CASCADE) + in_issue = models.ForeignKey(Issue, on_delete=models.CASCADE) paper_nr = models.PositiveSmallIntegerField() discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS) subject_area = models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS, verbose_name='Primary subject area', default='Phys:QP') - secondary_areas = ChoiceArrayField(models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS), + secondary_areas = ChoiceArrayField(models.CharField(max_length=10, + choices=SCIPOST_SUBJECT_AREAS), blank=True, null=True) title = models.CharField(max_length=300) author_list = models.CharField(max_length=1000, verbose_name="author list") @@ -168,8 +169,9 @@ class Publication(models.Model): authors = models.ManyToManyField (Contributor, blank=True, related_name='authors_pub') authors_unregistered = models.ManyToManyField (UnregisteredAuthor, blank=True, related_name='authors_unregistered') - first_author = models.ForeignKey (Contributor, blank=True, null=True) + first_author = models.ForeignKey (Contributor, blank=True, null=True, on_delete=models.CASCADE) first_author_unregistered = models.ForeignKey (UnregisteredAuthor, blank=True, null=True, + on_delete=models.CASCADE, related_name='first_author_unregistered') authors_claims = models.ManyToManyField (Contributor, blank=True, related_name='authors_pub_claims') @@ -338,7 +340,7 @@ class Deposit(models.Model): current version of the metadata_xml field. All deposit history is thus contained here. """ - publication = models.ForeignKey(Publication) + publication = models.ForeignKey(Publication, on_delete=models.CASCADE) doi_batch_id = models.CharField(max_length=40, default='') metadata_xml = models.TextField(blank=True, null=True) deposition_date = models.DateTimeField(default=timezone.now) diff --git a/scipost/models.py b/scipost/models.py index f566ccdba..87f37443c 100644 --- a/scipost/models.py +++ b/scipost/models.py @@ -184,7 +184,7 @@ class Contributor(models.Model): Permissions determine the sub-types. username, password, email, first_name and last_name are inherited from User. """ - user = models.OneToOneField(User) + user = models.OneToOneField(User, on_delete=models.CASCADE) invitation_key = models.CharField(max_length=40, default='', blank=True, null=True) activation_key = models.CharField(max_length=40, default='') @@ -885,7 +885,7 @@ class SupportingPartner(models.Model): institution_acronym = models.CharField(max_length=10) institution_address = models.CharField(max_length=1000) consortium_members = models.TextField(blank=True, null=True) - contact_person = models.ForeignKey(Contributor) + contact_person = models.ForeignKey(Contributor, on_delete=models.CASCADE) def __str__(self): return self.institution_acronym + ' (' + partner_status_dict[self.status] + ')' @@ -912,7 +912,7 @@ class SPBMembershipAgreement(models.Model): Agreement for membership of the Supporting Partners Board. A new instance is created each time an Agreement is made or renewed. """ - partner = models.ForeignKey(SupportingPartner) + partner = models.ForeignKey(SupportingPartner, on_delete=models.CASCADE) status = models.CharField(max_length=16, choices=SPB_MEMBERSHIP_AGREEMENT_STATUS) date_requested = models.DateField() start_date = models.DateField() diff --git a/scipost/urls.py b/scipost/urls.py index c67fe490e..d5d51881c 100644 --- a/scipost/urls.py +++ b/scipost/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, patterns, url +from django.conf.urls import include, url from django.views.generic import TemplateView from . import views diff --git a/submissions/models.py b/submissions/models.py index 472ef8e8d..83a19c09e 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -77,8 +77,9 @@ submission_type_dict = dict(SUBMISSION_TYPE) class Submission(models.Model): is_current = models.BooleanField(default=True) is_resubmission = models.BooleanField(default=False) - submitted_by = models.ForeignKey(Contributor) - editor_in_charge = models.ForeignKey(Contributor, related_name='EIC', blank=True, null=True) + submitted_by = models.ForeignKey(Contributor, on_delete=models.CASCADE) + editor_in_charge = models.ForeignKey(Contributor, related_name='EIC', blank=True, null=True, + on_delete=models.CASCADE) submitted_to_journal = models.CharField(max_length=30, choices=SCIPOST_JOURNALS_SUBMIT, verbose_name="Journal to be submitted to") submission_type = models.CharField(max_length=10, choices=SUBMISSION_TYPE, @@ -369,8 +370,8 @@ ASSIGNMENT_REFUSAL_REASONS = ( assignment_refusal_reasons_dict = dict(ASSIGNMENT_REFUSAL_REASONS) class EditorialAssignment(models.Model): - submission = models.ForeignKey(Submission) - to = models.ForeignKey(Contributor) + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) + to = models.ForeignKey(Contributor, on_delete=models.CASCADE) accepted = models.NullBooleanField(choices=ASSIGNMENT_NULLBOOL, default=None) # attribute `deprecated' becomes True if another Fellow becomes Editor-in-charge deprecated = models.BooleanField(default=False) @@ -459,8 +460,9 @@ class EditorialAssignment(models.Model): class RefereeInvitation(models.Model): - submission = models.ForeignKey(Submission) - referee = models.ForeignKey(Contributor, related_name='referee', blank=True, null=True) + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) + referee = models.ForeignKey(Contributor, related_name='referee', blank=True, null=True, + on_delete=models.CASCADE) title = models.CharField(max_length=4, choices=TITLE_CHOICES) first_name = models.CharField(max_length=30, default='') last_name = models.CharField(max_length=30, default='') @@ -469,7 +471,7 @@ class RefereeInvitation(models.Model): invitation_key = models.CharField(max_length=40, default='') date_invited = models.DateTimeField(default=timezone.now) invited_by = models.ForeignKey(Contributor, related_name='referee_invited_by', - blank=True, null=True) + blank=True, null=True, on_delete=models.CASCADE) nr_reminders = models.PositiveSmallIntegerField(default=0) date_last_reminded = models.DateTimeField(blank=True, null=True) accepted = models.NullBooleanField(choices=ASSIGNMENT_NULLBOOL, default=None) @@ -575,15 +577,15 @@ class Report(models.Model): # -3: rejected (not useful) # -4: rejected (not academic in style) status = models.SmallIntegerField(default=0) - submission = models.ForeignKey(Submission) + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) vetted_by = models.ForeignKey(Contributor, related_name="report_vetted_by", - blank=True, null=True) + blank=True, null=True, on_delete=models.CASCADE) # `invited' filled from RefereeInvitation objects at moment of report submission invited = models.BooleanField(default=False) # `flagged' if author of report has been flagged by submission authors (surname check only) flagged = models.BooleanField(default=False) date_submitted = models.DateTimeField('date submitted') - author = models.ForeignKey(Contributor) + author = models.ForeignKey(Contributor, on_delete=models.CASCADE) qualification = models.PositiveSmallIntegerField(choices=REFEREE_QUALIFICATION, verbose_name="Qualification to referee this: I am ") # Text-based reporting @@ -692,9 +694,9 @@ class EditorialCommunication(models.Model): Each individual communication between Editor-in-charge to and from Referees and Authors becomes an instance of this class. """ - submission = models.ForeignKey(Submission) + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) referee = models.ForeignKey(Contributor, related_name='referee_in_correspondence', - blank=True, null=True) + blank=True, null=True, on_delete=models.CASCADE) comtype = models.CharField(max_length=4, choices=ED_COMM_CHOICES) timestamp = models.DateTimeField(default=timezone.now) text = models.TextField() @@ -743,7 +745,7 @@ class EditorialCommunication(models.Model): # From the Editor-in-charge of a Submission class EICRecommendation(models.Model): - submission = models.ForeignKey(Submission) + submission = models.ForeignKey(Submission, on_delete=models.CASCADE) date_submitted = models.DateTimeField('date submitted', default=timezone.now) remarks_for_authors = models.TextField(blank=True, null=True) requested_changes = models.TextField(verbose_name="requested changes", blank=True, null=True) diff --git a/theses/models.py b/theses/models.py index 688ac76bd..f8d878a6a 100644 --- a/theses/models.py +++ b/theses/models.py @@ -19,9 +19,10 @@ thesis_type_dict = dict(THESIS_TYPES) class ThesisLink(models.Model): """ An URL pointing to a thesis """ requested_by = models.ForeignKey (Contributor, blank=True, null=True, - related_name='thesislink_requested_by') + related_name='thesislink_requested_by', + on_delete=models.CASCADE) vetted = models.BooleanField(default=False) - vetted_by = models.ForeignKey (Contributor, blank=True, null=True) + vetted_by = models.ForeignKey (Contributor, blank=True, null=True, on_delete=models.CASCADE) type = models.CharField(max_length=3, choices=THESIS_TYPES) discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics') domain = models.CharField(max_length=3, choices=SCIPOST_JOURNALS_DOMAINS, blank=True) -- GitLab