From f2bc4dd0a9e4676f77d4a1c0ddb5e836750f966c Mon Sep 17 00:00:00 2001 From: Karen Tracey Date: Mon, 8 Mar 2010 18:32:24 +0000 Subject: [PATCH] Fixed #12024: Changed admin code to avoid raising an exception when a field listed in raw_id_fields has limit_choices_to specified as a Q object. Tweaked a test to trigger the condition and verify the fix. Finally, documented that limit_choices_to specified as a Q object has no effect on the choices available for fields listed in raw_id_fields, and removed another incorrect note that claimed limit_choices_to had no effect on inlines in the admin. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12728 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/widgets.py | 2 +- docs/ref/models/fields.txt | 8 ++++---- tests/regressiontests/admin_widgets/models.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index d7befe4688..d10c9c11ee 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -133,7 +133,7 @@ class ForeignKeyRawIdWidget(forms.TextInput): def base_url_parameters(self): params = {} - if self.rel.limit_choices_to: + if self.rel.limit_choices_to and hasattr(self.rel.limit_choices_to, 'items'): items = [] for k, v in self.rel.limit_choices_to.items(): if isinstance(v, list): diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index d53bef2acf..db86d8e314 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -872,10 +872,10 @@ define the details of how the relation works. current date/time to be chosen. Instead of a dictionary this can also be a :class:`~django.db.models.Q` - object for more :ref:`complex queries `. - - ``limit_choices_to`` has no effect on the inline FormSets that are created - to display related objects in the admin. + object for more :ref:`complex queries `. However, + if ``limit_choices_to`` is a :class:`~django.db.models.Q` object then it + will only have an effect on the choices available in the admin when the + field is not listed in ``raw_id_fields`` in the ``ModelAdmin`` for the model. .. attribute:: ForeignKey.related_name diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py index ebf93d4b75..5632548414 100644 --- a/tests/regressiontests/admin_widgets/models.py +++ b/tests/regressiontests/admin_widgets/models.py @@ -49,7 +49,7 @@ class Inventory(models.Model): return self.name class Event(models.Model): - band = models.ForeignKey(Band) + band = models.ForeignKey(Band, limit_choices_to=models.Q(pk__gt=0)) start_date = models.DateField(blank=True, null=True) start_time = models.TimeField(blank=True, null=True) description = models.TextField(blank=True)