diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2011-02-21 14:08:06 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2011-02-21 14:08:06 +0000 |
| commit | 4df0e5ff8468916497ce9f4baad769787bff419a (patch) | |
| tree | 2e08cf02abe4e4de1e891d62258511b509a109ba /tests | |
| parent | fee8a498660374cfe9e710bd96d6f84fa64c1a2d (diff) | |
[1.2.X] Fixed #11707 - limit_choices_to on a ForeignKey can render duplicate options in formfield
Thanks to Chris Wesseling for the report and patch.
Backport of [15607] from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15610 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/model_fields/models.py | 5 | ||||
| -rw-r--r-- | tests/regressiontests/model_fields/tests.py | 19 |
2 files changed, 23 insertions, 1 deletions
diff --git a/tests/regressiontests/model_fields/models.py b/tests/regressiontests/model_fields/models.py index 45cd223142..4adaf3b113 100644 --- a/tests/regressiontests/model_fields/models.py +++ b/tests/regressiontests/model_fields/models.py @@ -29,6 +29,11 @@ class Bar(models.Model): b = models.CharField(max_length=10) a = models.ForeignKey(Foo, default=get_foo) +class Baz(models.Model): + a = models.CharField(max_length=5) + #Only Foos related to Bars starting with 'a' + foo = models.ForeignKey(Foo, limit_choices_to=models.Q(bar__b__startswith='a')) + class Whiz(models.Model): CHOICES = ( ('Group 1', ( diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py index 72a7d4d657..6835913f12 100644 --- a/tests/regressiontests/model_fields/tests.py +++ b/tests/regressiontests/model_fields/tests.py @@ -1,13 +1,14 @@ import datetime import unittest from decimal import Decimal +import re import django.test from django import forms from django.db import models from django.core.exceptions import ValidationError -from models import Foo, Bar, Whiz, BigD, BigS, Image, BigInt, Post, NullBooleanModel, BooleanModel +from models import Foo, Bar, Baz, Whiz, BigD, BigS, Image, BigInt, Post, NullBooleanModel, BooleanModel # If PIL available, do these tests. if Image: @@ -94,6 +95,10 @@ class DecimalFieldTests(django.test.TestCase): # This should not crash. That counts as a win for our purposes. Foo.objects.filter(d__gte=100000000000) +class BazForm(forms.ModelForm): + class Meta: + model = Baz + class ForeignKeyTests(django.test.TestCase): def test_callable_default(self): """Test the use of a lazy callable for ForeignKey.default""" @@ -101,6 +106,18 @@ class ForeignKeyTests(django.test.TestCase): b = Bar.objects.create(b="bcd") self.assertEqual(b.a, a) + def test_distinct_choice_limit(self): + """Doesn't make sense to offer the same ForeignKey multiple times in a form""" + a = Foo.objects.create(a='a', d=Decimal("-1")) + b = Foo.objects.create(a='b', d=Decimal("1")) + bar_a = Bar.objects.create(b='ah', a=a) + bar_b = Bar.objects.create(b='aha', a=a) + bar_b = Bar.objects.create(b='bla', a=b) + form = BazForm() + fk_field = str(form['foo']) + self.assertEqual(len(re.findall(r'value="2"', fk_field)), 0) + self.assertEqual(len(re.findall(r'value="1"', fk_field)), 1) + class DateTimeFieldTests(unittest.TestCase): def test_datetimefield_to_python_usecs(self): """DateTimeField.to_python should support usecs""" |
