diff --git a/helios/migrations/0001_initial.py b/helios/migrations/0001_initial.py
index cb2a41e6779c24b6b4022ac951810fc0b1b978a5..8ba6efbb125a7b1c4e1e3ed6e74b831bedaf25f1 100644
--- a/helios/migrations/0001_initial.py
+++ b/helios/migrations/0001_initial.py
@@ -87,7 +87,7 @@ class Migration(migrations.Migration):
                 ('result_proof', helios_auth.jsonfield.JSONField(null=True)),
                 ('help_email', models.EmailField(max_length=75, null=True)),
                 ('election_info_url', models.CharField(max_length=300, null=True)),
-                ('admin', models.ForeignKey(to='helios_auth.User')),
+                ('admin', models.ForeignKey(to='helios_auth.User', on_delete=models.CASCADE)),
             ],
             options={
                 'abstract': False,
@@ -100,7 +100,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('log', models.CharField(max_length=500)),
                 ('at', models.DateTimeField(auto_now_add=True)),
-                ('election', models.ForeignKey(to='helios.Election')),
+                ('election', models.ForeignKey(to='helios.Election', on_delete=models.CASCADE)),
             ],
             options={
             },
@@ -120,7 +120,7 @@ class Migration(migrations.Migration):
                 ('pok', helios.datatypes.djangofield.LDObjectField(null=True)),
                 ('decryption_factors', helios.datatypes.djangofield.LDObjectField(null=True)),
                 ('decryption_proofs', helios.datatypes.djangofield.LDObjectField(null=True)),
-                ('election', models.ForeignKey(to='helios.Election')),
+                ('election', models.ForeignKey(to='helios.Election', on_delete=models.CASCADE)),
             ],
             options={
             },
@@ -139,8 +139,8 @@ class Migration(migrations.Migration):
                 ('vote', helios.datatypes.djangofield.LDObjectField(null=True)),
                 ('vote_hash', models.CharField(max_length=100, null=True)),
                 ('cast_at', models.DateTimeField(null=True)),
-                ('election', models.ForeignKey(to='helios.Election')),
-                ('user', models.ForeignKey(to='helios_auth.User', null=True)),
+                ('election', models.ForeignKey(to='helios.Election', on_delete=models.CASCADE)),
+                ('user', models.ForeignKey(to='helios_auth.User', null=True, on_delete=models.CASCADE)),
             ],
             options={
             },
@@ -156,7 +156,7 @@ class Migration(migrations.Migration):
                 ('processing_started_at', models.DateTimeField(null=True)),
                 ('processing_finished_at', models.DateTimeField(null=True)),
                 ('num_voters', models.IntegerField(null=True)),
-                ('election', models.ForeignKey(to='helios.Election')),
+                ('election', models.ForeignKey(to='helios.Election', on_delete=models.CASCADE)),
             ],
             options={
             },
@@ -173,13 +173,13 @@ class Migration(migrations.Migration):
         migrations.AddField(
             model_name='castvote',
             name='voter',
-            field=models.ForeignKey(to='helios.Voter'),
+            field=models.ForeignKey(to='helios.Voter', on_delete=models.CASCADE),
             preserve_default=True,
         ),
         migrations.AddField(
             model_name='auditedballot',
             name='election',
-            field=models.ForeignKey(to='helios.Election'),
+            field=models.ForeignKey(to='helios.Election', on_delete=models.CASCADE),
             preserve_default=True,
         ),
     ]
diff --git a/helios/models.py b/helios/models.py
index 479c0bbae11d49d7fbdee29c5ab298378e2fc882..4252d1693e0c113c1007f22b69260851a9883bff 100644
--- a/helios/models.py
+++ b/helios/models.py
@@ -32,7 +32,7 @@ class HeliosModel(models.Model, datatypes.LDObjectContainer):
     abstract = True
 
 class Election(HeliosModel):
-  admin = models.ForeignKey(User)
+  admin = models.ForeignKey(User, on_delete=models.CASCADE)
   
   uuid = models.CharField(max_length=50, null=False)
 
@@ -662,7 +662,7 @@ class ElectionLog(models.Model):
   VOTER_FILE_ADDED = "voter file added"
   DECRYPTIONS_COMBINED = "decryptions combined"
 
-  election = models.ForeignKey(Election)
+  election = models.ForeignKey(Election, on_delete=models.CASCADE)
   log = models.CharField(max_length=500)
   at = models.DateTimeField(auto_now_add=True)
 
@@ -697,7 +697,7 @@ class VoterFile(models.Model):
   # path where we store voter upload 
   PATH = settings.VOTER_UPLOAD_REL_PATH
 
-  election = models.ForeignKey(Election)
+  election = models.ForeignKey(Election, on_delete=models.CASCADE)
 
   # we move to storing the content in the DB
   voter_file = models.FileField(upload_to=PATH, max_length=250,null=True)
@@ -790,7 +790,7 @@ class VoterFile(models.Model):
 
     
 class Voter(HeliosModel):
-  election = models.ForeignKey(Election)
+  election = models.ForeignKey(Election, on_delete=models.CASCADE)
   
   # let's link directly to the user now
   # FIXME: delete this as soon as migrations are set up
@@ -802,7 +802,7 @@ class Voter(HeliosModel):
 
   # for users of type password, no user object is created
   # but a dynamic user object is created automatically
-  user = models.ForeignKey('helios_auth.User', null=True)
+  user = models.ForeignKey('helios_auth.User', null=True, on_delete=models.CASCADE)
 
   # if user is null, then you need a voter login ID and password
   voter_login_id = models.CharField(max_length = 100, null=True)
@@ -988,7 +988,7 @@ class Voter(HeliosModel):
   
 class CastVote(HeliosModel):
   # the reference to the voter provides the voter_uuid
-  voter = models.ForeignKey(Voter)
+  voter = models.ForeignKey(Voter, on_delete=models.CASCADE)
   
   # the actual encrypted vote
   vote = LDObjectField(type_hint = 'legacy/EncryptedVote')
@@ -1098,7 +1098,7 @@ class AuditedBallot(models.Model):
   """
   ballots for auditing
   """
-  election = models.ForeignKey(Election)
+  election = models.ForeignKey(Election, on_delete=models.CASCADE)
   raw_vote = models.TextField()
   vote_hash = models.CharField(max_length=100)
   added_at = models.DateTimeField(auto_now_add=True)
@@ -1125,7 +1125,7 @@ class AuditedBallot(models.Model):
 
 
 class Trustee(HeliosModel):
-  election = models.ForeignKey(Election)
+  election = models.ForeignKey(Election, on_delete=models.CASCADE)
   
   uuid = models.CharField(max_length=50)
   name = models.CharField(max_length=200)