diff options
| author | Antoine Catton <acatton@fusionbox.com> | 2015-10-09 10:55:19 -0600 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-10-14 05:26:42 -0700 |
| commit | 38d6e1e2ada93e5d8c672ba18f1f8e3cd6c5ca76 (patch) | |
| tree | ae3d19dfe9a42e1eaec5e5cea2c4959ba564e0a4 /tests/foreign_object | |
| parent | aa0a3b680eb7e6a29ae004fcf229d288a702d89e (diff) | |
[1.9.x] Fixed #25535 -- Made ForeignObject checks less strict.
Check that the foreign object `from_fields` are a subset of any unique
constraints on the foreign model.
Backport of 80dac8c33e7f6f22577e4346f44e4c5ee89b648c and
c7aff31397a7228f6ac2e33c10ebdf36c4b7a9b7 from master
Diffstat (limited to 'tests/foreign_object')
| -rw-r--r-- | tests/foreign_object/tests.py | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/tests/foreign_object/tests.py b/tests/foreign_object/tests.py index 06e2551e4f..5188645325 100644 --- a/tests/foreign_object/tests.py +++ b/tests/foreign_object/tests.py @@ -2,7 +2,9 @@ import datetime from operator import attrgetter from django.core.exceptions import FieldError -from django.test import TestCase, skipUnlessDBFeature +from django.db import models +from django.db.models.fields.related import ForeignObject +from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature from django.utils import translation from .models import ( @@ -391,3 +393,52 @@ class MultiColumnFKTests(TestCase): """ See: https://code.djangoproject.com/ticket/21566 """ objs = [Person(name="abcd_%s" % i, person_country=self.usa) for i in range(0, 5)] Person.objects.bulk_create(objs, 10) + + +class TestModelCheckTests(SimpleTestCase): + + def test_check_composite_foreign_object(self): + class Parent(models.Model): + a = models.PositiveIntegerField() + b = models.PositiveIntegerField() + + class Meta: + unique_together = (('a', 'b'),) + + class Child(models.Model): + a = models.PositiveIntegerField() + b = models.PositiveIntegerField() + value = models.CharField(max_length=255) + parent = ForeignObject( + Parent, + on_delete=models.SET_NULL, + from_fields=('a', 'b'), + to_fields=('a', 'b'), + related_name='children', + ) + + self.assertEqual(Child._meta.get_field('parent').check(from_model=Child), []) + + def test_check_subset_composite_foreign_object(self): + class Parent(models.Model): + a = models.PositiveIntegerField() + b = models.PositiveIntegerField() + c = models.PositiveIntegerField() + + class Meta: + unique_together = (('a', 'b'),) + + class Child(models.Model): + a = models.PositiveIntegerField() + b = models.PositiveIntegerField() + c = models.PositiveIntegerField() + d = models.CharField(max_length=255) + parent = ForeignObject( + Parent, + on_delete=models.SET_NULL, + from_fields=('a', 'b', 'c'), + to_fields=('a', 'b', 'c'), + related_name='children', + ) + + self.assertEqual(Child._meta.get_field('parent').check(from_model=Child), []) |
