Кто-нибудь знает, как фильтровать в admin на основе сравнения по полям модели - выражения F()?
Предположим, что мы имеем следующую модель:
class Transport(models.Model):
start_area = models.ForeignKey(Area, related_name='starting_transports')
finish_area = models.ForeignKey(Area, related_name='finishing_transports')
Теперь, что я хотел бы сделать, это сделать админ-фильтр, который позволяет фильтровать объекты внутри зоны и транс-области, где in-area - это те, чьи start_area и finish_area являются одинаковыми, а trans-area - другие.
Я попытался это сделать, создав собственный фильтр FilterSpec, но есть две проблемы:
- FilterSpec привязан только к одному полю.
- FilterSpec не поддерживает выражения F() и исключает.
Вторая проблема может быть решена путем определения пользовательского класса ChangeList, но я не вижу способа решить первую.
Я также попытался "эмулировать" фильтр прямо в экземпляре ModelAdmin, перегружая метод запроса и отправляя дополнительный контекст в шаблон списка изменений, где сам фильтр будет жестко закодирован и распечатан вручную. К сожалению, кажется, что проблема заключается в том, что Django извлекает мои параметры GET (используемые в канале фильтра), поскольку они неизвестны экземпляру ModelAdmin, и вместо этого он помещает только? E = 1, который должен сигнализировать об ошибке.
Спасибо всем заблаговременно.
РЕДАКТИРОВАТЬ. Похоже, что функциональность, которая позволила бы это сделать, запланирована для следующего выпуска Django, см. http://code.djangoproject.com/ticket/5833. Тем не менее, кто-то знает, как это сделать в Django 1.2?