2010-01-21 104 views
7

我想知道我是怎麼能夠使用外鍵瓶坯例如Search_fields 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) 

搜索比我的admin.py文件我有

from CMS.Inventory.models import Product 

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

,但我希望'LotComments'能夠使用'產品'可以用於代碼的相同搜索字段。

希望我解釋這口井

回答

16

您可以在管理search_fields指定相關領域的搜索你的Django的查詢集做同樣的方式。檢查documentation。對於LotComments對象時,search_fields看起來是這樣的:

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

對於引用外鍵使用__(兩個下劃線):

from CMS.Inventory.models import Product 

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

添加到以前的答案。我想建議Django Admin advance filters

用戶這個插件添加預先搜索和保存高級搜索支持。 同樣在你的情況下,外鍵字段可以映射到一個名字。

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