diff options
Diffstat (limited to 'tests/delete/models.py')
| -rw-r--r-- | tests/delete/models.py | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/tests/delete/models.py b/tests/delete/models.py index e2ddce0588..7a38ecc777 100644 --- a/tests/delete/models.py +++ b/tests/delete/models.py @@ -1,8 +1,17 @@ +from django.contrib.contenttypes.fields import ( + GenericForeignKey, GenericRelation, +) +from django.contrib.contenttypes.models import ContentType from django.db import models +class P(models.Model): + pass + + class R(models.Model): is_default = models.BooleanField(default=False) + p = models.ForeignKey(P, models.CASCADE, null=True) def __str__(self): return "%s" % self.pk @@ -46,10 +55,12 @@ class A(models.Model): ) cascade = models.ForeignKey(R, models.CASCADE, related_name='cascade_set') cascade_nullable = models.ForeignKey(R, models.CASCADE, null=True, related_name='cascade_nullable_set') - protect = models.ForeignKey(R, models.PROTECT, null=True) + protect = models.ForeignKey(R, models.PROTECT, null=True, related_name='protect_set') + restrict = models.ForeignKey(R, models.RESTRICT, null=True, related_name='restrict_set') donothing = models.ForeignKey(R, models.DO_NOTHING, null=True, related_name='donothing_set') child = models.ForeignKey(RChild, models.CASCADE, related_name="child") child_setnull = models.ForeignKey(RChild, models.SET_NULL, null=True, related_name="child_setnull") + cascade_p = models.ForeignKey(P, models.CASCADE, related_name='cascade_p_set', null=True) # A OneToOneField is just a ForeignKey unique=True, so we don't duplicate # all the tests; just one smoke test to ensure on_delete works for it as @@ -61,7 +72,7 @@ def create_a(name): a = A(name=name) for name in ('auto', 'auto_nullable', 'setvalue', 'setnull', 'setdefault', 'setdefault_none', 'cascade', 'cascade_nullable', 'protect', - 'donothing', 'o2o_setnull'): + 'restrict', 'donothing', 'o2o_setnull'): r = R.objects.create() setattr(a, name, r) a.child = RChild.objects.create() @@ -147,3 +158,45 @@ class SecondReferrer(models.Model): other_referrer = models.ForeignKey( Referrer, models.CASCADE, to_field='unique_field', related_name='+' ) + + +class DeleteTop(models.Model): + b1 = GenericRelation('GenericB1') + b2 = GenericRelation('GenericB2') + + +class B1(models.Model): + delete_top = models.ForeignKey(DeleteTop, models.CASCADE) + + +class B2(models.Model): + delete_top = models.ForeignKey(DeleteTop, models.CASCADE) + + +class DeleteBottom(models.Model): + b1 = models.ForeignKey(B1, models.RESTRICT) + b2 = models.ForeignKey(B2, models.CASCADE) + + +class GenericB1(models.Model): + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + object_id = models.PositiveIntegerField() + generic_delete_top = GenericForeignKey('content_type', 'object_id') + + +class GenericB2(models.Model): + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + object_id = models.PositiveIntegerField() + generic_delete_top = GenericForeignKey('content_type', 'object_id') + generic_delete_bottom = GenericRelation('GenericDeleteBottom') + + +class GenericDeleteBottom(models.Model): + generic_b1 = models.ForeignKey(GenericB1, models.RESTRICT) + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + object_id = models.PositiveIntegerField() + generic_b2 = GenericForeignKey() + + +class GenericDeleteBottomParent(models.Model): + generic_delete_bottom = models.ForeignKey(GenericDeleteBottom, on_delete=models.CASCADE) |
