https://docs.djangoproject.com/en/4.1/ref/models/fields/#django.db.models.CASCADE
> Django emulates the behavior of the SQL constraint ON DELETE CASCADE and also deletes the object containing the ForeignKey. this is specified in the docs. https://code.djangoproject.com/ticket/21961 On Friday, January 20, 2023 at 10:44:48 AM UTC-5 [email protected] wrote: > Hi dennis, > You can open a ticket on the trac (https://code.djangoproject.com/query) > for whatever issue you are facing.It will be easier to understand there. > > Regards > Bhuvnesh > > > On Fri, Jan 20, 2023, 8:36 PM Dennis Tants <[email protected]> wrote: > >> Hey folks, >> >> I recently came across what I think is a bug. Let me try to explain it as >> detailed as possible. >> Imagine I have two models, one is called Events, the other is called >> EventAccounts. EventAccounts can't exist without an Event, so I added a >> ForeignKey with the on_delete=models.CASCADE constraint to one field of >> EventAccounts. Should I delete an event, the corresponding event accounts >> will also be deleted. This works just fine when using Django itself (or the >> admin pages). See my models.py. >> models.py: >> >> class Events(models.Model): >> ... >> >> class EventAccounts(models.Model): >> ... >> account_event = models.ForeignKey(Events, on_delete=models.CASCADE) >> ... >> >> >> Now one of my tasks is to cleanup the database every day to delete >> events, which ended more than two weeks ago. I was thinking of creating a >> cronjob to run raw SQL every day. When running this command: >> >> DELETE FROM app_eventtool_events WHERE event_end_date < (NOW() - INTERVAL >> 14 DAY); >> >> I always get informed that there is an existing child and the events do >> not get deleted. Which is why I had a look at the table constraints with: >> >> SHOW CREATE TABLE app_eventtool_eventaccounts; >> >> It seems that the ON DELETE CASCADE statement at the end is missing: >> >> CONSTRAINT `app_eventtool_eventa_account_event_id_0ff3718a_fk_app_event` >> FOREIGN KEY (`account_event_id`) REFERENCES `app_eventtool_events` >> (`event_id`) >> >> If I now delete the above constraint and add a selfmade one, it looks >> like this: >> >> ALTER TABLE app_eventtool_eventaccounts ADD CONSTRAINT >> app_eventtool_events_account_event_id FOREIGN KEY (account_event_id) >> REFERENCES app_eventtool_events (event_id) ON DELETE CASCADE ON UPDATE NO >> ACTION; >> CONSTRAINT `app_eventtool_events_account_event_id` FOREIGN KEY >> (`account_event_id`) REFERENCES `app_eventtool_events` (`event_id`) ON >> DELETE CASCADE ON UPDATE NO ACTION >> >> As you can see, ON DELETE CASCADE is now present. Now I am also able to >> delete the events with raw SQL as mentioned above. This is reproducible >> when dropping and creating the database fully. Updating from version 4.0.6 >> to version 4.1.5 did not solve the problem. >> >> Furthermore I started testing a bit with the on_delete statement in >> models.py. I changed models.CASCADE to models.RESTRICT and created a new >> migration. The migration file itself looks fine. But when trying to get the >> raw SQL of the migration via: >> >> python3 manage.py sqlmigrate app_eventtool 0002 >> >> it basically results in an empty migration: >> >> -- >> -- Alter field account_event on eventaccounts >> -- >> -- (no-op) >> >> >> Maybe this is expected behaviour, but for me it seems like a bug. Can >> anyone confirm/deny this? >> >> Thanks in advance, >> Dennis >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/cb989abd-cb08-8093-668a-03b756149be1%40uni-bremen.de >> >> <https://groups.google.com/d/msgid/django-users/cb989abd-cb08-8093-668a-03b756149be1%40uni-bremen.de?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/67684c77-0d05-4514-b675-abe6e0eb2b20n%40googlegroups.com.

