#13640: add_filter in django/db/models/ sql/query.py causes exception when model
have 'evaluate' attribute
---------------------------------------------------+------------------------
          Reporter:  LukaszKorzybski               |         Owner:  nobody
            Status:  new                           |     Milestone:        
         Component:  Database layer (models, ORM)  |       Version:  1.2   
        Resolution:                                |      Keywords:        
             Stage:  Unreviewed                    |     Has_patch:  0     
        Needs_docs:  0                             |   Needs_tests:  0     
Needs_better_patch:  0                             |  
---------------------------------------------------+------------------------
Old description:

> I was migrating some django project recently from django 1.0.4 to 1.2.
> In Django 1.2/1.1 I found that if model have 'evaluate' attribute then
> one will get exception in admin edit page for that model if the page
> contains inline forms with related models:
>
> Exception Value:  'Shipper' object has no attribute 'prepare'
> Exception Location:     .../django/db/models/sql/expressions.py in
> __init__, line 12
>
> It is caused by the fact that add_filter function in django/db/models/
> sql/query.py does such a check:
>
> ...
> 1005.  elif hasattr(value, 'evaluate'):
> 1006.      # If value is a query expression, evaluate it
> 1007.      value = SQLEvaluator(value, self) ...
> 1008.      having_clause = value.contains_aggregate
> ...
>
> The problem is that "value" in this case is Shipper model which in
> have "evaluate" method so it is recognized as query expression here.
>
> Greetings,

New description:

 I was migrating some django project recently from django 1.0.4 to 1.2.
 In Django 1.2/1.1 I found that if model have 'evaluate' attribute then
 one will get exception in admin edit page for that model if the page
 contains inline forms with related models:
 {{{
 Exception Value:  'Shipper' object has no attribute 'prepare'
 Exception Location:     .../django/db/models/sql/expressions.py in
 __init__, line 12
 }}}
 It is caused by the fact that add_filter function in
 django/db/models/sql/query.py does such a check:
 {{{
 ...
 1005.  elif hasattr(value, 'evaluate'):
 1006.      # If value is a query expression, evaluate it
 1007.      value = SQLEvaluator(value, self) ...
 1008.      having_clause = value.contains_aggregate
 ...
 }}}
 The problem is that "value" in this case is Shipper model which in
 have "evaluate" method so it is recognized as query expression here.

 Greetings,

Comment (by Alex):

 Updated the syntax.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/13640#comment:2>
Django <http://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 post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to