From 8207b33a30afbf757891a5b9e5151258299d561e Mon Sep 17 00:00:00 2001 From: Sanj Date: Fri, 8 Jun 2012 12:44:05 +0530 Subject: [PATCH] try doing custom filter spec things to make unique routes stops filtered --- chaloBEST/mumbai/admin.py | 16 ++++++++++++++++ chaloBEST/mumbai/models.py | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/chaloBEST/mumbai/admin.py b/chaloBEST/mumbai/admin.py index 184a4d6..c653ce4 100644 --- a/chaloBEST/mumbai/admin.py +++ b/chaloBEST/mumbai/admin.py @@ -2,6 +2,22 @@ from django.contrib.gis import admin from django import forms from mumbai.models import * from django.contrib.contenttypes import generic +from django.contrib.admin.filterspecs import FilterSpec, RelatedFilterSpec + + +class CustomFilterSpec(RelatedFilterSpec): + def __init__(self, f, *args, **kwargs): + super(CustomFilterSpec, self).__init__(f, *args, **kwargs) + instance = f + stop_choices = instance.get_stop_choices() + CHOICES = ( + (item.id, item.name) for item in stop_choices + ) + self.lookup_choices = CHOICES + + +FilterSpec.filter_specs.insert(0, (lambda f: bool(f.rel and hasattr(f, 'custom_filter_spec')), CustomFilterSpec)) + class RouteScheduleInline(admin.StackedInline): model = RouteSchedule diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index d4d50e4..f640d91 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -7,6 +7,8 @@ from django.db import connection import json from django.contrib.gis.measure import D + + STOP_CHOICES = ( ('U','Up'), ('D', 'Down'), ) @@ -301,7 +303,8 @@ class UniqueRoute(models.Model): to_stop = models.ForeignKey(Stop, related_name="unique_routes_to") distance = models.FloatField(blank=True, null=True) is_full = models.BooleanField() - + from_stop.custom_filter_spec = True # this is used to identify the fields which use the custom filter + to_stop.custom_filter_spec = True # this is used to identify the fields which use the custom filter class Meta: verbose_name = 'Atlas' verbose_name_plural = 'Atlas' @@ -310,7 +313,7 @@ class UniqueRoute(models.Model): return "%s: %s to %s" % (self.route.alias, self.from_stop_txt, self.to_stop_txt) def get_stop_choices(self): - return Stop.objects.filter(routedetail__route=self.instance.route).order_by('routedetail') + return Stop.objects.filter(routedetail__route=self.route).order_by('routedetail') class RouteSchedule(models.Model): unique_route = models.ForeignKey(UniqueRoute)