Включение фильтров администратора Django в полях «многие ко многим» - PullRequest
14 голосов
/ 19 марта 2011

У меня есть простая модель Django, напоминающая:

class Address(models.Model):
    blah

class MemberData(models.Model):
    user = models.ForeignKey(User)
    addresses = models.ManyToManyField(Address)

Я хочу представить модель адресов в admin, чтобы позволить пользователю фильтровать записи адресов по их ассоциированному пользователю. например,

class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = [???]

Свойство ModelAdmin.list_filter позволяет это сделать, но я не уверен, какое имя поля использовать для поддержки моих отношений «многие ко многим». Если модель Address имеет прямую ссылку на модель MemberData, я мог бы сделать что-то вроде:

class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = ['memberdata__user']

Существует ли эквивалентный синтаксис для косвенного отношения «многие ко многим»? Если нет, есть ли обходной путь для достижения той же цели?

Ответы [ 2 ]

7 голосов
/ 02 февраля 2012

Я полагаю, что в таком случае вы могли бы создать тривиальную through модель для вашего отношения M2M, а затем использовать обычный синтаксис для следования (теперь явного) ForeignKey s.Что-то вроде:

class Address(models.Model):
    blah

class MemberData(models.Model):
    user = models.ForeignKey(User)
    addresses = models.ManyToManyField(Address,through='MemberAddress')

class MemberAddress(models.Model):
    member = models.ForeignKey(MemberData)
    address = models.ForeignKey(Address)

и в админке:

class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = ['memberaddress_set__member__user']
2 голосов
/ 10 октября 2013

Я использую 1,5 и list_filter = ['memberdata__user'] кажется, что это будет работать.

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