mirror of
https://github.com/django/django.git
synced 2025-10-27 07:36:08 +00:00
Fixed #21961 -- Added support for database-level delete options for ForeignKey.
Thanks Simon Charette for pair programming. Co-authored-by: Nick Stefan <NickStefan12@gmail.com> Co-authored-by: Akash Kumar Sen <71623442+Akash-Kumar-Sen@users.noreply.github.com> Co-authored-by: Simon Charette <charette.s@gmail.com>
This commit is contained in:
@@ -41,6 +41,46 @@ class RChildChild(RChild):
|
||||
pass
|
||||
|
||||
|
||||
class RelatedDbOptionGrandParent(models.Model):
|
||||
pass
|
||||
|
||||
|
||||
class RelatedDbOptionParent(models.Model):
|
||||
p = models.ForeignKey(RelatedDbOptionGrandParent, models.DB_CASCADE, null=True)
|
||||
|
||||
|
||||
class RelatedDbOption(models.Model):
|
||||
name = models.CharField(max_length=30)
|
||||
db_setnull = models.ForeignKey(
|
||||
RelatedDbOptionParent,
|
||||
models.DB_SET_NULL,
|
||||
null=True,
|
||||
related_name="db_setnull_set",
|
||||
)
|
||||
db_cascade = models.ForeignKey(
|
||||
RelatedDbOptionParent, models.DB_CASCADE, related_name="db_cascade_set"
|
||||
)
|
||||
|
||||
|
||||
class SetDefaultDbModel(models.Model):
|
||||
db_setdefault = models.ForeignKey(
|
||||
RelatedDbOptionParent,
|
||||
models.DB_SET_DEFAULT,
|
||||
db_default=models.Value(1),
|
||||
related_name="db_setdefault_set",
|
||||
)
|
||||
db_setdefault_none = models.ForeignKey(
|
||||
RelatedDbOptionParent,
|
||||
models.DB_SET_DEFAULT,
|
||||
db_default=None,
|
||||
null=True,
|
||||
related_name="db_setnull_nullable_set",
|
||||
)
|
||||
|
||||
class Meta:
|
||||
required_db_features = {"supports_on_delete_db_default"}
|
||||
|
||||
|
||||
class A(models.Model):
|
||||
name = models.CharField(max_length=30)
|
||||
|
||||
@@ -119,6 +159,15 @@ def create_a(name):
|
||||
return a
|
||||
|
||||
|
||||
def create_related_db_option(name):
|
||||
a = RelatedDbOption(name=name)
|
||||
for name in ["db_setnull", "db_cascade"]:
|
||||
r = RelatedDbOptionParent.objects.create()
|
||||
setattr(a, name, r)
|
||||
a.save()
|
||||
return a
|
||||
|
||||
|
||||
class M(models.Model):
|
||||
m2m = models.ManyToManyField(R, related_name="m_set")
|
||||
m2m_through = models.ManyToManyField(R, through="MR", related_name="m_through_set")
|
||||
|
||||
Reference in New Issue
Block a user