2010-01-21 4 views
7

Ich frage mich, wie ich in der Lage bin einen Fremdschlüssel zu verwenden, um eine Suche zum BeispielSearch_fields in django python

class Product(models.Model): 
    name = models.CharField(max_length = 127) 
    description = models.TextField() 
    code = models.CharField(max_length = 127) 

    def __unicode__(self): 
     return self.name + " - " + self.code 

class ProductLot(models.Model): 
    product = models.ForeignKey(Product) 
    code = models.CharField(max_length = 30) 
    lot_no = models.CharField(max_length = 30) 
    location = models.CharField(max_length = 127) 
    incoming = models.IntegerField() 
    commited = models.IntegerField() 
    available = models.IntegerField() 
    reorder = models.IntegerField() 
    created_date = models.DateField(auto_now_add=True) 

    def __unicode__(self): 
     return self.code + " - " + self.product.name + " - " + self.lot_no 

class LotComment(models.Model): 
    product_lot = models.ForeignKey(ProductLot) 
    comment_user = models.ForeignKey(User, null=True) 
    comment_text = models.TextField() 
    created_date = models.DateField(auto_now_add=True) 

    def __unicode__(self): 
     return self.product_lot.product.code + " - " + 
      self.product_lot.product.name + " - " + 
      self.product_lot.lot_no + " - " + str(self.created_date) 

als in meiner admin.py Datei zu vorzuformen habe ich

from CMS.Inventory.models import Product 

class padmin(admin.ModelAdmin): 
    search_fields=['name', 'description', 'code', 'lot_no' ] 
admin.site.register(Product, padmin) 

aber ich möchte, dass 'LotComments' die gleichen Suchfelder verwenden können, die 'Produkt' wie für Code ect.

Hoffnung erklärte ich dieses gut

Antwort

16

Sie verwandten Bereich Suche im Admin angeben search_fields auf die gleiche Weise auf Django querysets tun. Überprüfen Sie auf documentation. Für die LotComments Objekt, schauen die search_fields wäre so etwas wie:

search_fields = ['product_lot__product__name', 
       'product_lot__product__description', 
       'product_lot__product__code', 
       'product_lot__lot_no'] 
1

für den Fremdschlüssel Verwendung Referenzierung __ (zwei Unterstrichen):

from CMS.Inventory.models import Product 

class ProductAdmin(admin.ModelAdmin): 
    search_fields=['name__name', 'description', 'code', 'lot_no' ] 
    admin.site.register(Product, padmin) 
2

zu den vorherigen Antworten Hinzufügen. Ich würde vorschlagen, Django Admin advance filters

Benutzer dieses Plugin, um erweiterte Suche und speichern Sie die erweiterte Suche Unterstützung hinzufügen. Auch in Ihrem Fall können Fremdschlüsselfelder einem Namen zugeordnet werden.

class padmin(AdminAdvancedFiltersMixin, admin.ModelAdmin): 
    advanced_filter_fields = ('name', ('product_lot__product__name', 'Product name'))