diff --git a/smash/web/models/appointment.py b/smash/web/models/appointment.py
index 2dac8a1310fcba945995a6648147c0bd250a6fd7..55440a0a4ca530830b073ab8839fa4c764b69f50 100644
--- a/smash/web/models/appointment.py
+++ b/smash/web/models/appointment.py
@@ -29,11 +29,11 @@ class Appointment(models.Model):
 
     flying_team = models.ForeignKey("web.FlyingTeam",
                                     verbose_name='Flying team (if applicable)',
-                                    null=True, blank=True
+                                    null=True, blank=True, on_delete=models.CASCADE
                                     )
     worker_assigned = models.ForeignKey("web.Worker",
                                         verbose_name='Worker conducting the assessment (if applicable)',
-                                        null=True, blank=True
+                                        null=True, blank=True, on_delete=models.CASCADE
                                         )
 
     appointment_types = models.ManyToManyField("web.AppointmentType",
@@ -44,16 +44,16 @@ class Appointment(models.Model):
     room = models.ForeignKey("web.Room",
                              verbose_name='Room ID',
                              null=True,
-                             blank=True
+                             blank=True, on_delete=models.CASCADE
                              )
     location = models.ForeignKey("web.Location",
-                                 verbose_name='Location',
+                                 verbose_name='Location', on_delete=models.CASCADE
                                  )
     visit = models.ForeignKey("web.Visit",
                               verbose_name='Visit ID',
                               editable=False,
                               null=True,
-                              blank=True,
+                              blank=True, on_delete=models.CASCADE
                               )
     comment = models.TextField(max_length=1024,
                                verbose_name='Comment',
diff --git a/smash/web/models/appointment_type_link.py b/smash/web/models/appointment_type_link.py
index c2de6050854dc57820b72b3d53b3f945f3d08aaf..682acd43efc7af959339f89c11f572ae981241bf 100644
--- a/smash/web/models/appointment_type_link.py
+++ b/smash/web/models/appointment_type_link.py
@@ -9,7 +9,7 @@ class AppointmentTypeLink(models.Model):
     appointment = models.ForeignKey("web.Appointment", on_delete=models.CASCADE)
     appointment_type = models.ForeignKey("web.AppointmentType", on_delete=models.CASCADE)
     date_when = models.DateTimeField(null=True, default=None)
-    worker = models.ForeignKey("web.Worker", null=True, default=None)
+    worker = models.ForeignKey("web.Worker", null=True, default=None, on_delete=models.CASCADE)
 
     def save(self, *args, **kwargs):
         if self.date_when is not None:
diff --git a/smash/web/models/contact_attempt.py b/smash/web/models/contact_attempt.py
index 8eec61db67dd0597de95e0c13c02f025c8b01a44..f1416f9ede9ba5b6b1b57c4d66034f3b55c77bee 100644
--- a/smash/web/models/contact_attempt.py
+++ b/smash/web/models/contact_attempt.py
@@ -8,10 +8,10 @@ __author__ = 'Valentin Grouès'
 
 class ContactAttempt(models.Model):
     subject = models.ForeignKey("web.StudySubject",
-                                verbose_name='Subject'
+                                verbose_name='Subject', on_delete=models.CASCADE
                                 )
     worker = models.ForeignKey("web.Worker", null=True,
-                               verbose_name='Worker'
+                               verbose_name='Worker', on_delete=models.CASCADE
                                )
     type = models.CharField(max_length=2, default=CONTACT_TYPES_PHONE, choices=CONTACT_TYPES_CHOICES)
 
diff --git a/smash/web/models/inconsistent_subject.py b/smash/web/models/inconsistent_subject.py
index aacdf1189c49748a708b263e0fe4214cf9fa609e..fce64100f2027d03ee7400cb077f8853f295dd18 100644
--- a/smash/web/models/inconsistent_subject.py
+++ b/smash/web/models/inconsistent_subject.py
@@ -19,6 +19,7 @@ class InconsistentField(models.Model):
                                     )
     inconsistent_subject = models.ForeignKey("web.InconsistentSubject",
                                              verbose_name='Invalid fields',
+                                             on_delete=models.CASCADE
                                              )
 
     @staticmethod
@@ -47,7 +48,8 @@ class InconsistentSubject(models.Model):
     subject = models.ForeignKey("web.StudySubject",
                                 verbose_name='Subject',
                                 null=True,
-                                blank=True
+                                blank=True,
+                                on_delete=models.CASCADE
                                 )
 
     redcap_url = models.CharField(max_length=255,
diff --git a/smash/web/models/missing_subject.py b/smash/web/models/missing_subject.py
index 6050dd7e290ee6e10b6edbf059b2d592cc4e3c9d..284e3f96e8497148897773e6912212d55c3ad382 100644
--- a/smash/web/models/missing_subject.py
+++ b/smash/web/models/missing_subject.py
@@ -14,7 +14,8 @@ class MissingSubject(models.Model):
     subject = models.ForeignKey("web.StudySubject",
                                 verbose_name='Subject',
                                 null=True,
-                                blank=True
+                                blank=True,
+                                on_delete=models.CASCADE
                                 )
 
     redcap_id = models.CharField(max_length=255,
diff --git a/smash/web/models/provenance.py b/smash/web/models/provenance.py
index 79e1f665fa06dc4da8d67264f0b0924a2011c078..30a84fd9d6ccbae778c2f0291be52fdb3cffde82 100644
--- a/smash/web/models/provenance.py
+++ b/smash/web/models/provenance.py
@@ -23,7 +23,7 @@ class Provenance(models.Model):
 
     modification_author = models.ForeignKey("web.Worker",
                             verbose_name='Worker who modified the row',
-                            null=True, blank=False
+                            null=True, blank=False, on_delete=models.deletion.CASCADE
                         )
 
     modified_field = models.CharField(max_length=1024,
diff --git a/smash/web/models/study_subject.py b/smash/web/models/study_subject.py
index 5e4c14a59f2c3cdd8b344e4f4961cf596960486a..ce9cd0b01fc86d9c116d0ecd20a5fb9acbce5cae 100644
--- a/smash/web/models/study_subject.py
+++ b/smash/web/models/study_subject.py
@@ -52,13 +52,13 @@ class StudySubject(models.Model):
     subject = models.ForeignKey("web.Subject",
                                 verbose_name='Subject',
                                 editable=False,
-                                null=False,
+                                null=False, on_delete=models.CASCADE
                                 )
 
     study = models.ForeignKey("web.Study",
                               verbose_name='Study',
                               editable=False,
-                              null=False,
+                              null=False, on_delete=models.CASCADE
                               )
 
     postponed = models.BooleanField(choices=BOOL_CHOICES,
@@ -80,13 +80,13 @@ class StudySubject(models.Model):
     default_location = models.ForeignKey(Location,
                                          verbose_name='Default appointment location',
                                          null=True,
-                                         blank=True
+                                         blank=True, on_delete=models.CASCADE
                                          )
 
     flying_team = models.ForeignKey("web.FlyingTeam",
                                     verbose_name='Default flying team location (if applicable)',
                                     null=True,
-                                    blank=True
+                                    blank=True, on_delete=models.CASCADE
                                     )
 
     screening_number = models.CharField(max_length=50,
@@ -125,7 +125,7 @@ class StudySubject(models.Model):
     health_partner = models.ForeignKey("web.Worker",
                                        verbose_name='Health partner',
                                        null=True,
-                                       blank=True
+                                       blank=True, on_delete=models.CASCADE
                                        )
 
     health_partner_feedback_agreement = models.BooleanField(
diff --git a/smash/web/models/subject.py b/smash/web/models/subject.py
index 34b6cec5113f4abf77aebca7b9ca9e2ccda77995..2f35eb689a2b73869d771ae6a9523fa1d5eda5cb 100644
--- a/smash/web/models/subject.py
+++ b/smash/web/models/subject.py
@@ -51,7 +51,8 @@ class Subject(models.Model):
                                                                null=True,
                                                                blank=True,
                                                                related_name="subjects_written_communication",
-                                                               verbose_name='Default language for document generation'
+                                                               verbose_name='Default language for document generation', 
+                                                               on_delete=models.CASCADE
                                                                )
     phone_number = models.CharField(max_length=64,
                                     null=True,
@@ -102,7 +103,7 @@ class Subject(models.Model):
                                 null=False,
                                 blank=False,
                                 default=COUNTRY_OTHER_ID,
-                                verbose_name='Country'
+                                verbose_name='Country', on_delete=models.CASCADE
                                 )
 
     next_of_keen_name = models.CharField(max_length=255,
diff --git a/smash/web/models/voucher.py b/smash/web/models/voucher.py
index 560b5896a342dcd3c90be70f2ff1f97e7011a521..53bd4785d3dd79dcdd9e1d41ac2027348327d052 100644
--- a/smash/web/models/voucher.py
+++ b/smash/web/models/voucher.py
@@ -21,7 +21,7 @@ class Voucher(models.Model):
     issue_date = models.DateField(verbose_name='Issue date', null=False)
     expiry_date = models.DateField(verbose_name='Expiry date', null=False)
 
-    issue_worker = models.ForeignKey(Worker, verbose_name='Issued by', null=False, related_name='issued_vouchers')
+    issue_worker = models.ForeignKey(Worker, verbose_name='Issued by', null=False, related_name='issued_vouchers', on_delete=models.CASCADE)
 
     hours = models.IntegerField(
         verbose_name='Hours',
diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py
index 6ccb96750ea41c81a1b2bf7560605a7765b52f64..183cb92a24bc7f0a1244be41d3db21fb23f83dbc 100644
--- a/smash/web/models/worker.py
+++ b/smash/web/models/worker.py
@@ -77,7 +77,7 @@ class Worker(models.Model):
                                        blank=True
                                        )
     user = models.OneToOneField(User, blank=True, null=True,
-                                verbose_name='Username'
+                                verbose_name='Username', on_delete=models.CASCADE
                                 )
     first_name = models.CharField(max_length=50,
                                   verbose_name='First name',
@@ -124,7 +124,7 @@ class Worker(models.Model):
                                 null=False,
                                 blank=False,
                                 default=COUNTRY_OTHER_ID,
-                                verbose_name='Country'
+                                verbose_name='Country', on_delete=models.CASCADE
                                 )
 
     voucher_types = models.ManyToManyField("web.VoucherType",
diff --git a/smash/web/models/worker_study_role.py b/smash/web/models/worker_study_role.py
index e13544c233791fa6d43c7b8b2e96b9e26692d8c4..b32b40fb856d088eb1d8c09444e17a1f07857011 100644
--- a/smash/web/models/worker_study_role.py
+++ b/smash/web/models/worker_study_role.py
@@ -45,10 +45,11 @@ class WorkerStudyRole(models.Model):
         app_label = 'web'
 
     worker = models.ForeignKey("web.Worker",
-                               related_name="roles"
+                               related_name="roles", 
+                               on_delete=models.CASCADE
                                )
 
-    study = models.ForeignKey("web.Study")
+    study = models.ForeignKey("web.Study", on_delete=models.CASCADE)
 
     name = models.CharField(max_length=20, choices=STUDY_ROLE_CHOICES,
                             verbose_name='Role'