Django - Поиск по полю
Мои модели:
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)
My 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? Укажите код. Большое вам спасибо!
Ответы
Ответ 1
UPDATE: этот ответ устарел, вместо ответа от elsadek
Вы просите уметь следовать обратному отношению (т.е. от PhoneNumber назад к контакту), но я не верю, что трюк с двумя подчеркиваниями __
для spanning tables будет работать здесь.
Если ваш Контакт имел ключ к модели PhoneNumber вместо текущей настройки:
class Contact(models.Model):
...
phone = models.ForeignKey(PhoneNumber)
то в конфигурации администратора вы можете:
search_fields = ('first_name', 'last_name', 'email', 'phone__phone')
Ответ 2
На всякий случай кто-то приходит к этому вопросу, в 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')