#23795: Django form fields : limit_choices_to should not be mandatory with
queryset
-------------------------+-------------------------------------------------
Reporter: | Owner: nobody
artscoop | Status: new
Type: Bug | Version: 1.7
Component: Forms | Keywords: formfield, queryset,
Severity: Normal | limit_choices_to
Triage Stage: | Has patch: 0
Unreviewed | UI/UX: 0
Easy pickings: 0 |
-------------------------+-------------------------------------------------
Hi,
I've found something that might be a bug, and which didn't happen with
Django 1.6.
I have an admin definition which uses a custom form field (an ajax field
for ForeignKey lookups which inherits from `CharField`), and changes the
form as follows:
{{{
def get_form(self, request, obj=None, **kwargs):
form = super(ProfileAdmin, self).get_form(request, obj, **kwargs)
if obj is not None:
form.base_fields['picture'].queryset = obj.pictures.all()
return form
}}}
This works well with Django 1.6 (and the queryset filtering is ok), but
clashes with Django 1.7 code (*django/forms/models.py, 333, in
BaseModelForm.__init__*)
{{{
if hasattr(formfield, 'queryset'):
limit_choices_to = formfield.limit_choices_to # this
attribute might not be a member of the field
if limit_choices_to is not None:
if callable(limit_choices_to):
limit_choices_to = limit_choices_to()
formfield.queryset =
formfield.queryset.complex_filter(limit_choices_to)
}}}
This fails with an `AttributeError` because Django assumes, without
checking, that when a formfield is altered to use a queryset, it also uses
a `limit_choices_to` attribute. This is not always true, it seems.
I see no error when instead of the custom field, I use a
`ModelChoiceField` (this makes sense, `ModelChoiceField` always has a
`limit_choices_to` field).
{{{
limit_choices_to = formfield.limit_choices_to
}}}
should be
{{{
limit_choices_to = getattr(formfield, 'limit_choices_to', None)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/23795>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/051.5e4aa044a4dcb39ffa3b1564b38ca921%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.