настройка админки django - PullRequest
0 голосов
/ 26 мая 2010

Я хочу использовать фильтр администратора django на странице списка. У меня есть такие модели:

class Location(model):
  name = CharField()

class Inquiry(Model):
  name = CharFiled()
  location = ManyToManyField(Location)

Теперь я хочу отфильтровать запросы, чтобы отображать только те из них, которые содержат отношение к конкретному объекту Location. Если я использую

class InqAdmin(ModelAdmin):
  list_filter = ['location', ]

admin.site.register(Inquiry, InqAdmin)

На странице администратора отображается список всех Locations и фильтрация.

То, что я хотел бы получить, это получить список только тех местоположений, которые имеют некоторые Inquiries по отношению к ним (поэтому я никогда не получаю результат пустого списка после фильтрации).

Как это можно сделать?

1 Ответ

1 голос
/ 27 мая 2010

Вы можете создать собственный менеджер для местоположений, который возвращает только местоположения, с которыми связан запрос.Если вы сделаете его менеджером по умолчанию, администратор будет его использовать.

Единственное предостережение: вам нужно будет создать другого менеджера, который будет возвращать все локации и использовать его в остальной части вашего приложения, когда вы захотите получить локациис которым не связан запрос.

Раздел менеджеров в Django docs довольно хорош, и должен быть всем, что вам нужно для настройки.

РЕДАКТИРОВАТЬ:

Сиенф поднимает хороший вопрос.Другой способ сделать это - определить подкласс django.contrib.admin.SimpleListFilter и написать метод queryset, чтобы отфильтровать запросы с пустыми местоположениями.Смотри https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...