Thanks, Rajesh, that most definately helps.  I figured that I'd have to
resort to something like option #1 after many google searches.



On 10/17/07, RajeshD <[EMAIL PROTECTED]> wrote:
>
>
> Hi Jason,
>
> > Using the models below I'd like to be able to create Querysets such as:
> >
> > a = Treatment.objects.filter(total_dose__range=(4000,10000))
> > b = a.filter(tumor__patient__gender = 'M')
> >
> > Both of the above work, but then I'd like to have an additional filter:
> > c = b.filter(tumor__patient__get_followup_length__gt = 5)
>
> This is not possible because get_followup_length is not a field in the
> DB table but a model class method and Django doesn't support that
> (because it can't build a SQL statement out of this queryset
> definition.)
>
> Here are some alternatives:
>
> Option #1. Add a followup_length field to your Patient model. Rename
> the method get_followup_length to compute_followup_length and change
> it so that it stores its computed value into the new followup_length
> field.
>
> Then, call compute_followup_length() from  delete() and save() methods
> in Tumor. In other words, everytime Tumor is changed, its Patient's
> followup_length gets computed. You can also achieve this via signals
> if you don't want to override Tumor.delete() and Tumor.save(). See:
> http://code.djangoproject.com/wiki/Signals
>
> Option #2. Filter the result set in memory using standard Python:
> c = [x for x in b if x.tumor.patient.get_followup_length() > 5]
>
> Note that, if you expect c to have a lot of rows, this will load them
> all in memory. And, obviously, c will be a list rather than a
> queryset.
>
> Hope this helps.
>
> -Rajesh
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to