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