A few suggestions :

Circumvent the problem with smarter design: don't store the money on the
object, make the user's money the sum of all their transactions (credit -
debit).
You get lesser performance, but you also get history!

Maybe you could try (not sure about that):

MyModel.objects.filter(money__gte = value, pk = self.pk).update(F...)

and inspect the return value (number of updated rows!).
Now, you'd need to make sure django does that in a single statement.

If that doesn't work, I think update is the way to go anyway, but it might
get a bit messy.

F... is an F object whose syntax I don't have off the top of my head.
Le 20 août 2012 18:54, "Sebastien Flory" <sfl...@gmail.com> a écrit :

> Hi everyone,
>
> I'm looking for the proper django way to do an update of an attribute on
> my model instance, but only if the attribute current value is checked
> agains't a condition, in an atomic way, something like this:
>
> def use_money(self, value):
>   begin_transaction()
>   real_money = F('money')
>   if real_money >= value:
>     self.money = F('money') - value
>     self.save()
>   end_transaction()
>
> I want to make sure that I avoid race condition so money never goes below
> 0.
>
> Can you help me out?
>
> Thanks,
>
> Sebastien
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/hr1fBuAcX3kJ.
> 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.
>

-- 
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