summaryrefslogtreecommitdiff
path: root/tests/foreign_object
diff options
context:
space:
mode:
authorAntoine Catton <acatton@fusionbox.com>2015-10-09 10:55:19 -0600
committerTim Graham <timograham@gmail.com>2015-10-14 05:26:42 -0700
commit38d6e1e2ada93e5d8c672ba18f1f8e3cd6c5ca76 (patch)
treeae3d19dfe9a42e1eaec5e5cea2c4959ba564e0a4 /tests/foreign_object
parentaa0a3b680eb7e6a29ae004fcf229d288a702d89e (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.py53
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), [])