Inappropriate Cascade
Description
This check ensures that the CASCADE
option is not used inappropriately for the on_delete
parameter in ForeignKey
fields, as it can lead to unexpected data loss when a related object is deleted.
Rationale
Using CASCADE
for the on_delete
parameter in ForeignKey
fields can result in the deletion of related objects when the referenced object is deleted. While this may be appropriate in some cases, other options like SET_NULL
or PROTECT
can be safer alternatives depending on the application's requirements.
Example
Consider the following model:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
The author field is a ForeignKey field and is using the CASCADE option for on_delete. The check would detect this and recommend considering alternative options:
author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)
# or
author = models.ForeignKey(Author, on_delete=models.PROTECT)
Evaluate the impact of using CASCADE on your application's data integrity and choose the appropriate option based on your specific use case.