#11886: F() expressions don't retain parentheses into final SQL
---------------------------+------------------------------------------------
 Reporter:  russellm       |       Owner:  nobody    
   Status:  new            |   Milestone:            
Component:  Uncategorized  |     Version:  1.1       
 Keywords:                 |       Stage:  Unreviewed
Has_patch:  0              |  
---------------------------+------------------------------------------------
 Reported by Brent Hagany on django-users:

 I'm having some trouble getting F() expressions to obey my parentheses
 when I don't want the default order of operations.  For example, given
 the model:
 {{{
 class MyModel(models.Model):
    wins = models.DecimalField(max_digits=1, decimal_places=0)
    losses = models.DecimalField(max_digits=1, decimal_places=0)
    win_percentage = models.DecimalField(max_digits=4, decimal_places=3,
 default=Decimal('0.000'))
 }}}
 I get the following results when trying to calculate the
 win_percentage:
 {{{
 In [1]: MyModel.objects.create(wins=2, losses=4)
 Out[1]: <MyModel: MyModel object>

 In [2]: MyModel.objects.all().update(win_percentage=F('wins') / (F
 ('wins') + F('losses')))
 Out[2]: 1

 # I expect this to return Decimal("0.333")
 In [3]: MyModel.objects.get(pk=1).win_percentage
 Out[3]: Decimal("5.000")
 }}}
 It appears to be ignoring the parentheses around F('wins') + F
 ('losses'), and so instead of 2 / (2 + 4) = .333, I'm getting 2 / 2 +
 4 = 5.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/11886>
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to