On Wed, Sep 16, 2009 at 9:36 AM, Brent Hagany <brent.hag...@gmail.com> wrote:
>
> 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.  Am I doing this wrong, or is this by design, or is it a bug?

This appears to be a bug - and a fairly embarrassing one at that.
Although the parentheses are correctly parsed, the query evaluator
doesn't appear to be using that detail when outputting the final
query.

I've opened ticket #11886 to track this problem. Looking at the code,
it seems to be caused by a fairly dumb mistake in the query evaluator;
if I'm correct, I should be able to commit a fix this evening.

Yours,
Russ Magee %-)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to