#23624: Regression in ManyToManyField with through, runtime-generated models
-------------------------------------+-------------------------------------
     Reporter:  ludoo                |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.7
  (models, ORM)                      |               Resolution:
     Severity:  Normal               |             Triage Stage:
     Keywords:                       |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by ludoo:

Old description:

> I admit my situation is a corner case: an app interfacing with a legacy
> db, where I need to extend an abstract model to contextualize it to
> identical tables, named differently (eg obj_1 table, obj_2 table, etc.),
> and to make things worse the number of tables is only known at runtime.
>
> I am then dynamically generating a module for each set of models, and
> while things work great in Django 1.6, in 1.7 ManyToManyField using a
> through model breaks.
>
> I am attaching a sample models.py file that illustrates the issue. I have
> not yet found the time to delve into what's happening, I hope someone
> with a better understanding of all the related stuff steps in as it's
> something I have never looked into.

New description:

 I admit my situation is a corner case: an app interfacing with a legacy
 db, where I need to extend an abstract model to contextualize it to
 identical tables, named differently (eg obj_1 table, obj_2 table, etc.),
 and to make things worse the number of tables is only known at runtime.

 I am then dynamically generating a module for each set of models, and
 while things work great in Django 1.6, in 1.7 ManyToManyField using a
 through model breaks.

 I am attaching a sample models.py file that illustrates the issue. I have
 not yet found the time to delve into what's happening, I hope someone with
 a better understanding of all the related stuff steps in as it's something
 I have never looked into.

 What happens is that the manager seems to ignore the through model, here
 is the traceback (actual call and models in the attached file):


 {{{
 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/manager.py", line 191, in all
     return self.get_queryset()
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/fields/related.py", line 887, in get_queryset
     return qs._next_is_sticky().filter(**self.core_filters)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 691, in filter
     return self._filter_or_exclude(False, *args, **kwargs)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/query.py", line 709, in _filter_or_exclude
     clone.query.add_q(Q(*args, **kwargs))
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1287, in add_q
     clause, require_inner = self._add_q(where_part, self.used_aliases)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1314, in _add_q
     current_negated=current_negated, connector=connector)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1138, in build_filter
     lookups, parts, reffed_aggregate = self.solve_lookup_type(arg)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1076, in solve_lookup_type
     _, field, _, lookup_parts = self.names_to_path(lookup_splitted,
 self.get_meta())
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1383, in names_to_path
     self.raise_field_error(opts, name)
   File "/home/ludo/Desktop/dev/venv/spritz/local/lib/python2.7/site-
 packages/django/db/models/sql/query.py", line 1389, in raise_field_error
     "Choices are: %s" % (name, ", ".join(available)))
 FieldError: Cannot resolve keyword u'a' into field. Choices are: a_s, id,
 name

 }}}

--

--
Ticket URL: <https://code.djangoproject.com/ticket/23624#comment:2>
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/063.ea74ddf97e7746c4945f3d2db096b422%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to