#30524 closed Bug (invalid)
on_delete doesn't work properly with MySql.
Description (last modified by ) ¶
Model:
class Attempt(models.Model): student = models.ForeignKey(Student, models.CASCADE, related_name='quiz_attempts',null=False) quiz = models.ForeignKey(Quiz,on_delete=models.CASCADE,related_name='quiz_attempts') score = models.FloatField() over = models.BooleanField(default=False) date = models.DateTimeField(auto_now_add=True) currquestion = models.ForeignKey(Question,null=True,default=None,on_delete=models.SET_NULL) class Meta: indexes = [ models.Index(fields=['student']), models.Index(fields=['quiz']), ]
Table created in MySql:
CREATE TABLE `classroom_attempt` ( `id` int(11) NOT NULL AUTO_INCREMENT, `score` double NOT NULL, `over` tinyint(1) NOT NULL, `date` datetime(6) NOT NULL, `currquestion_id` int(11) DEFAULT NULL, `quiz_id` int(11) NOT NULL, `student_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `classroom_a_student_1a21bc_idx` (`student_id`), KEY `classroom_a_quiz_id_eef64a_idx` (`quiz_id`), KEY `classroom_attempt_currquestion_id_545301ef_fk_classroom` (`currquestion_id`), CONSTRAINT `classroom_attempt_currquestion_id_545301ef_fk_classroom` FOREIGN KEY (`currquestion_id`) REFERENCES `classroom_question` (`id`), CONSTRAINT `classroom_attempt_quiz_id_e227b203_fk_classroom_quiz_id` FOREIGN KEY (`quiz_id`) REFERENCES `classroom_quiz` (`id`), CONSTRAINT `classroom_attempt_student_id_a4dc81cd_fk_classroom` FOREIGN KEY (`student_id`) REFERENCES `classroom_student` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------------------+---------------------
As you can notice models.CASCADE is not applied.
Change History (2)
comment:1 by , 6 years ago
Description: | modified (diff) |
---|---|
Keywords: | indexes removed |
comment:2 by , 6 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Django doesn't support database level foreign keys on delete yet, this is tracked in #21961.
The
models.CASCADE
value implements cascade deletion at the application/Python level in order to supportpre_delete
andpost_delete
signals.