2010-08-26 11 views
10

Meine Modelle:Django - Suche nach verwandten Bereichen

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) 

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

Wie die Telefonnummern in Django Admin suchen? Bitte geben Sie einen Code ein. Vielen Dank!

Antwort

6

UPDATE: diese Antwort unmodern ist, siehe die answer from elsadek statt


Sie fragen zu können, eine umgekehrte Beziehung folgen (dh von Phone zurück zum Kontakt), aber ich glaube nicht, das Double-Unterstrich __ Trick für Spanning-Tabellen wird hier funktionieren.

Wenn Ihr Kontakt den Schlüssel zum Phone Modell statt der aktuellen Set-up hatte:

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

dann im Admin-Config können Sie tun:

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

Bitte berühren Sie nicht meine Modelle :( – anhtran

+2

In diesem Fall können Sie es nicht in der Admin. –

+0

Ok, danke. Ich werde andere Wege wählen. – anhtran

8

Nur falls jemand kommt Über diese Frage ist in Django 1.6 eine Suche in umgekehrter Beziehung tatsächlich möglich.

In Ihrem Modell hinzufügen related_name = "phonesList" Feld kontaktieren

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

Jetzt in search_field können Sie die Doppel undescore verwenden von conatct Telefone zu gehen wie folgt aus: phonesList__phone

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