On Thu, Jan 22, 2009 at 10:57 PM, jason.t.stein <jason.t.st...@gmail.com> wrote:
>
> Perhaps this is an sql question, and not a Django question so please
> have patience. I am writing a student management app that keeps track
> of student events. The relevant tables are:
>
> class Student(models.Model):
>  first_name = models.CharField(max_length=32)
>  last_name = models.CharField(max_length=32)
>  birth_date = models.DateField('Student Birth Date')
>  gender = models.CharField(max_length=1, choices = GENDER_CHOICES)
>  school = models.ForeignKey(School)
>
> class Competitor(models.Model):
>  student = models.ForeignKey(Student)
>  track_meet = models.ForeignKey(TrackMeet)
>  age_category = models.CharField(max_length=1, choices =
> AGE_CATEGORY_CHOICES)
>  event = models.CharField(max_length=16, choices = EVENT_CHOICES)
>
> I want to set age_category, based on the age of a student on a certain
> date. I can calculate the appropriate age, but am interested how to
> set the age_category based on this calculation.
>
> Any help is greatly appreciated. Thank you for your time.

Hi Jason,

There are several possible answers to your question, depending on how
and when you want to set the age_category.

Are you looking to do this as a bulk SQL operation (i.e., update every
object at once)? In which case, the best way will be in raw SQL - you
will need to investigate the CASE operator on your database of choice.

Alternatively, if you are looking to set the initial age category when
the competitor record is saved to the database, then all you need to
do is override the save() method on your competitor. The following
code is untested (and not particularly accurate as an age
calculation), but should give you an idea of the approach:

   def save(self, *args, **kwargs):
      age = (date.today() - self.student.birth_date) / 365
      if age > 10:
          self.age_category = AGE_CATEGORY.SENIOR
      else:
          self.age_category = AGE_CATEGORY.JUNIOR
      super(Competitor, self).save(*args, **kwargs)

It's also worth asking whether the age category needs to be in the
database at all. If it is purely derived from the age of the student,
there may be an argument for not storing it in the database at all,
and computing the age category whenever it is required.

Hope this helps,

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