2010-01-21 20 views
7

me preguntaba cómo soy capaz de utilizar una clave externa para preformas una búsqueda por ejemplosearch_fields en python django

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) 

que en mi archivo admin.py tengo

from CMS.Inventory.models import Product 

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

pero quiere que 'LotComments' pueda usar los mismos campos de búsqueda que 'Producto' que con código ect.

Esperanza explicó que esta bien

Respuesta

16

Puede especificar búsquedas de campo relacionados en el admin search_fields la misma manera que lo hace en QuerySets Django. Compruebe en el documentation. Para el objeto LotComments, la search_fields sería algo como:

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

para hacer referencia a la utilización de clave externa __ (dos guiones):

from CMS.Inventory.models import Product 

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

Agregando a las respuestas anteriores. Me gustaría sugerir Django Admin advance filters

Utilice este complemento para agregar búsquedas avanzadas y guardar el soporte de búsqueda avanzada. También en su caso, los campos de clave externa se pueden asignar a un nombre.

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