> > Please do elaborate on this. AFAIK FKs in filter() work just fine, so > > if there's something broken we should know about it right away. > > I found ticket 2076, but that only concerns order_by(). > > I haven't got access to my code at the moment.
Ok, I got hold of my code. Of course (I had a feeling that this was going to happen), the only places I can find where I couldn't get filtering to work are where I'm doing something that is probably too complex to do with SQL (although I'm no SQL expert). Here's the function I ended up with after trying to get it going with filter() : def exception_age(request, year_filter): """Lists cadets that might not be the right age for the course they applied for.""" this_june = date(int(year_filter), 6, 1) this_sept = date(int(year_filter), 9, 1) apps = list(Application.objects.filter(year=year_filter)) # filter out any that are definitely the right age apps = [a for a in apps if (a.cadet.age_on(this_june) < float(a.camp.min_age)) or (a.cadet.ages_out() < this_sept)] I don't have the filter() versions that I tried along the way, but it was based on comparing the application.cadet.date_of_birth field. This one involves comparing the values in two tables : def exception_eligibility(request, year_filter): """Lists cadets not in the right level for the course they applied for.""" apps = list(Application.objects.filter(year=year_filter)) # filter out any that are in the right level apps = [a for a in apps if a.training_level < a.camp.min_training_level] # Sort the list by squadron number apps.sort(key=sqn_of_app); return render_to_response('camps/exception_eligibility.html', {'object_list' : apps,}) and this one requires doing a calculation on the difference between two fields (cadet.date_of_birth and cadet.enrollment_date) : def exception_enrollment(request, year_filter): """Lists cadets enrolled too young who've applied this year.""" apps = list(Application.objects.filter(year=year_filter)) # filter out any that joined old enough cdts = [a.cadet for a in apps if a.cadet.age_at_enrollment() < 12] # Sort the list by squadron number cdts.sort(key=sqn_of_cdt); return render_to_response('camps/exception_enrollment.html', {'object_list' : cdts,}) I do have examples of where order_by doesn't work. Here's one : def wing(app): return app.cadet.sqn.wing.name def camp_csv(request, year_filter, object_id): [...] app_list = list(camp.application_set.filter(year=year_filter)) # Sort by wing app_list.sort(key=wing) # app_list = camp.application_set.filter(year=year_filter).order_by('camps_application__c adet.sqn.wing.name') [...] You can see where I've commented-out what I wanted to do. The commented-out version gives : Exception Type: OperationalError Exception Value: (1054, "Unknown column 'camps_application__cadet.sqn.wing.name' in 'order clause'") This is following a series of foreign keys (application belongs to cadet, belongs to sqn, belongs to wing). Chris --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---