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
This commit is contained in:
Karen Tracey 2010-03-08 18:32:24 +00:00
parent fa3b4a47ef
commit f2bc4dd0a9
3 changed files with 6 additions and 6 deletions

View File

@ -133,7 +133,7 @@ class ForeignKeyRawIdWidget(forms.TextInput):
def base_url_parameters(self): def base_url_parameters(self):
params = {} params = {}
if self.rel.limit_choices_to: if self.rel.limit_choices_to and hasattr(self.rel.limit_choices_to, 'items'):
items = [] items = []
for k, v in self.rel.limit_choices_to.items(): for k, v in self.rel.limit_choices_to.items():
if isinstance(v, list): if isinstance(v, list):

View File

@ -872,10 +872,10 @@ define the details of how the relation works.
current date/time to be chosen. current date/time to be chosen.
Instead of a dictionary this can also be a :class:`~django.db.models.Q` Instead of a dictionary this can also be a :class:`~django.db.models.Q`
object for more :ref:`complex queries <complex-lookups-with-q>`. object for more :ref:`complex queries <complex-lookups-with-q>`. However,
if ``limit_choices_to`` is a :class:`~django.db.models.Q` object then it
``limit_choices_to`` has no effect on the inline FormSets that are created will only have an effect on the choices available in the admin when the
to display related objects in the admin. field is not listed in ``raw_id_fields`` in the ``ModelAdmin`` for the model.
.. attribute:: ForeignKey.related_name .. attribute:: ForeignKey.related_name

View File

@ -49,7 +49,7 @@ class Inventory(models.Model):
return self.name return self.name
class Event(models.Model): 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_date = models.DateField(blank=True, null=True)
start_time = models.TimeField(blank=True, null=True) start_time = models.TimeField(blank=True, null=True)
description = models.TextField(blank=True) description = models.TextField(blank=True)