Django - Поиск связанных полей - PullRequest
11 голосов
/ 26 августа 2010

Мои модели:

class Contact(models.Model):
    first_name = models.CharField(_("First name"), max_length=30, )
    last_name = models.CharField(_("Last name"), max_length=30, )
    email = models.EmailField(_("Email"), blank=True, max_length=75)

class PhoneNumber(models.Model):
    contact = models.ForeignKey(Contact)
    phone = models.CharField(_("Phone Number"), blank=True, max_length=30, )
    primary = models.BooleanField(_("Primary"), default=False)

Мой admin.py:

class ContactOptions(AutocompleteAdmin):
    list_display = ('last_name', 'first_name')
    ordering = ['last_name']
    search_fields = ('first_name', 'last_name', 'email')
    related_search_fields = { """??? I want to search the Phone Numbers ???""" }

Как искать номера телефонов в админке Django? Пожалуйста, дайте код. Большое спасибо!

Ответы [ 2 ]

10 голосов
/ 15 ноября 2014

На всякий случай, если кто-то ответит на этот вопрос, в Django 1.6 поиск в обратном соотношении действительно возможен.

В вашей модели телефона добавьте related_name = "phonesList" в поле контакта

contact = models.ForeignKey(Contact, related_name="phonesList")

Теперь в search_field вы можете использовать двойное удаление, чтобы перейти от conatct к таким телефонам: phonesList__phone

search_fields = ('first_name', 'last_name', 'email','phonesList__phone')
8 голосов
/ 26 августа 2010

ОБНОВЛЕНИЕ: этот ответ устарел, см. ответ от elsadek вместо


Вы просите иметь возможность следовать обратному отношению (т. Е. От PhoneNumber обратно к контакту), но я не верю, что трюк с двойным подчеркиванием __ для охватывающих таблиц будет работать здесь.

Если у вашего Контакта был ключ к модели PhoneNumber вместо текущей настройки:

class Contact(models.Model):
    ...
    phone = models.ForeignKey(PhoneNumber)

тогда в конфигурации администратора вы можете сделать:

search_fields = ('first_name', 'last_name', 'email', 'phone__phone')
...