2010-08-26 22 views
10

mis modelos:Django - Buscar campos relacionados

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) 

Mi 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 ???""" } 

Cómo buscar los números de teléfono en Django administrador? Por favor, dame un código. ¡Muchas gracias!

Respuesta

6

ACTUALIZACIÓN: esta respuesta está pasada de moda, ver el lugar answer from elsadek


Usted está pidiendo que sea capaz de seguir una relación inversa (es decir, a partir de Fax de nuevo a contacto), pero no creo que la doble guión __ truco para tablas de expansión funcionará aquí.

Si su contacto tenía la clave para el modelo Fax en lugar de la configuración actual:

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

continuación, en la configuración de administración que podría hacer:

search_fields = ('first_name', 'last_name', 'email', 'phone__phone') 
+3

No toque mis modelos :( – anhtran

+2

En ese caso, no puede hacerlo en el administrador. –

+0

Ok, gracias. Elegiré otras formas. – anhtran

8

Por si alguien viene Sobre esta pregunta, en Django 1.6, la búsqueda en relación inversa es realmente posible.

En su modelo de teléfono añadir related_name = "phonesList" ponerse en contacto con el campo

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

Ahora en search_field puede utilizar el doble undescore pasar de conatct a los teléfonos de esta manera: phonesList__phone

search_fields = ('first_name', 'last_name', 'email','phonesList__phone') 
Cuestiones relacionadas