Opened 6 years ago

Last modified 14 months ago

#13677 new Bug

ModelFormSet may query wrong database backend

Reported by: Pierre Chifflier Owned by: David Gouldin
Component: Forms Version: 1.2
Severity: Normal Keywords:
Cc: dgouldin@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description

When using a ModelFormSet with a queryset using a DB different from the 'default' one, the validation of the fields fails.

debugging the code shows that the db used is the wrong one:

-> self.instance.clean_fields(exclude=exclude)
  /usr/lib/pymodules/python2.5/django/db/models/base.py(902)clean_fields()
-> setattr(self, f.attname, f.clean(raw_value, self))
  /usr/lib/pymodules/python2.5/django/db/models/fields/__init__.py(194)clean()
-> self.validate(value, model_instance)
  /usr/lib/pymodules/python2.5/django/db/models/fields/related.py(831)validate()
-> qs = self.rel.to._default_manager.filter(**{self.rel.field_name:value})
> /usr/lib/pymodules/python2.5/django/db/models/manager.py(141)filter()
-> return self.get_query_set().filter(*args, **kwargs)
(Pdb) p self.get_query_set().db
'default'

The ModelFormSet was created by creating Form with a queryset:

def make_projecttask_formset(p, extra=0):
    class _ProjectTaskForm(forms.ModelForm):
        project = forms.ModelChoiceField(label="Project",
                queryset=Project.objects.using('otherdb').filter(project_id=p.project_id))
...
    return modelformset_factory(ew_projecttask, form=_ProjectTaskForm, extra=extra)

Expected behavior: used db should be the same as in the queryset

Note: it seems the problems is known (bug not fixed):

Attachments (1)

13677.diff (3.1 KB) - added by David Gouldin 6 years ago.

Download all attachments as: .zip

Change History (9)

comment:1 Changed 6 years ago by Russell Keith-Magee

Component: UncategorizedDatabase layer (models, ORM)
milestone: 1.3
Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset
Triage Stage: UnreviewedAccepted

comment:2 Changed 6 years ago by David Gouldin

Cc: dgouldin@… added
Owner: changed from nobody to David Gouldin

Changed 6 years ago by David Gouldin

Attachment: 13677.diff added

comment:3 Changed 6 years ago by David Gouldin

Has patch: set

comment:4 Changed 6 years ago by Julien Phalip

Severity: Normal
Type: Bug

comment:5 Changed 5 years ago by patchhammer

Easy pickings: unset
Patch needs improvement: set

13677.diff fails to apply cleanly on to trunk

comment:6 Changed 5 years ago by Jacob

milestone: 1.3

Milestone 1.3 deleted

comment:11 Changed 5 years ago by Aymeric Augustin

UI/UX: unset

Change UI/UX from NULL to False.

comment:12 Changed 14 months ago by Tim Graham

Component: Database layer (models, ORM)Forms
Summary: wrong backend with multidb and modelformsetModelFormSet may query wrong database backend
Note: See TracTickets for help on using tickets.
Back to Top