Increment a value in a database table field

2,272 views
Skip to first unread message

Denis Bahati

unread,
Nov 12, 2009, 10:51:11 AM11/12/09
to django...@googlegroups.com
Hi All,

I have a field with an integer value which needs to be incremented
every time any user updates its status within a week. If that week has
passed it should insert a new row. Now i was trying to figure out but
didn't get any concept on how to go through. Please any idea?

scot....@gmail.com

unread,
Nov 12, 2009, 2:58:28 PM11/12/09
to Django users
You don't mention how you're tracking dates or weeks (is that a
related model, or... ?) but this would be the general idea:

- get the timestamp of the last update to that field and compare it to
the current timestamp

if ... : # interval is less than a week:
foo = MyModel.objects.get(...)
foo.counter = foo.counter + 1
else : interval is more than a week
foo = MyModel()
foo.counter = 1

foo.save()

Denis Bahati

unread,
Nov 14, 2009, 10:25:45 AM11/14/09
to django...@googlegroups.com
Hi,
Here is my model am using to update items status.
 
class User(models.Model)
            users = models.ForeignKey(User)
            resources = models.ForeignKey(Resource)
           date_tracked = models.DateTimeField('Date Tracked')
           description = models.TextField()
           status_count_per_week = models.IntegerField()
status = models.ForeignKey(Status)

class Meta:
verbose_name_plural = 'Track Resources'

What i want to achieve is that:
  When i update the status the item first i should get the date last tracked and compare with tje current date, if the date tracked and the current date are not in the same week it should insert into a new row of status_count_per_week. If the date tracked and the current date are in the same week it should increment the value of status_count_per_week .
Regards.
Denis.
 

--

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



Karen Tracey

unread,
Nov 14, 2009, 10:43:53 AM11/14/09
to django...@googlegroups.com
On Sat, Nov 14, 2009 at 10:25 AM, Denis Bahati <djm...@gmail.com> wrote:
Hi,
Here is my model am using to update items status.
 
class User(models.Model)
            users = models.ForeignKey(User)
            resources = models.ForeignKey(Resource)
           date_tracked = models.DateTimeField('Date Tracked')
           description = models.TextField()
           status_count_per_week = models.IntegerField()
status = models.ForeignKey(Status)

class Meta:
verbose_name_plural = 'Track Resources'

What i want to achieve is that:
  When i update the status the item first i should get the date last tracked and compare with tje current date, if the date tracked and the current date are not in the same week it should insert into a new row of status_count_per_week. If the date tracked and the current date are in the same week it should increment the value of status_count_per_week .


I find your model and description confusing -- I am not sure the model you have defined is correct for what you want to achieve -- so I am not going to attempt to craft a solution exactly. Instead I'll point you to the two building blocks I think you need to achieve what you are looking for.  First, get_or_create:

http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs

which you can use to either get the model containing a specific set of fields or create it if it does not exist.

Second, update() with an F() expression can be used to atomically increment a counter:

http://docs.djangoproject.com/en/dev/ref/models/instances/#updating-attributes-based-on-existing-fields

Karen

 

Denis Bahati

unread,
Nov 15, 2009, 7:44:27 AM11/15/09
to django...@googlegroups.com
Exactly Karen the model is confusing. Here is the exactly model.

class Resource_Track(models.Model)
            users = models.ForeignKey(User)
            resources = models.ForeignKey(Resource)
            date_tracked = models.DateTimeField('Date Tracked')
            description = models.TextField()
            status_count_per_week = models.IntegerField()
            status = models.ForeignKey(Status)

            class Meta:
               verbose_name_plural = 'Track Resources'

Sorry for confusing you.
Regards
Denis.

--

Reply all
Reply to author
Forward
0 new messages