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)
然后在我的 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' 也能使用和 'Product' 一样的搜索字段,比如代码等等。
希望我解释得清楚。
3 个回答
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 高级过滤器 的插件。
这个插件可以帮助你添加高级搜索功能,并且支持保存高级搜索的设置。在你的情况下,外键字段也可以映射到一个名称上。
class padmin(AdminAdvancedFiltersMixin, admin.ModelAdmin):
advanced_filter_fields = ('name', ('product_lot__product__name', 'Product name'))
17
你可以在管理后台的 search_fields
中指定相关字段的搜索,和在Django的查询集中做法是一样的。具体可以查看文档。对于 LotComments
这个对象,search_fields
的设置大概是这样的:
search_fields = ['product_lot__product__name',
'product_lot__product__description',
'product_lot__product__code',
'product_lot__lot_no']