我在我的django模型上使用开箱即用的django管理搜索。我的一个用例是从条形码扫描中查找对象。问题是条形码有一堆前导零,这会阻止查询返回正确的条形码。
我的解决方案是覆盖admin / search_form.html模板,并在查询执行之前应用自定义模板过滤器来格式化字符串。我写了一个名为stripLeadingZeroes的自定义模板过滤器,我可以成功加载它。然后我覆盖search_form模板,并在 cl.query 上使用我的自定义模板过滤器....将其更改为 cl.query | stripLeadingZeroes 通过这些编辑,查询执行,由于前导零而没有返回结果,然后在执行查询后应用过滤器。
如何在查询之前格式化字符串?
以下是我在search_form模板中更改的行
<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query|stripLeadingZeroes }}" id="searchbar" />
答案 0 :(得分:1)
最简单的方法是按照django docs中的建议覆盖ModelAdmin.get_search_results。
class OccurrenceAdmin(admin.ModelAdmin):
list_display = ['barcode','description']
search_fields = ['description']
def get_search_results(self, request, queryset, search_term):
try:
search_term_as_int = int(search_term)
except ValueError:
pass
else:
queryset |= self.model.objects.filter(barcode=search_term_as_int)
return queryset, use_distinct
将搜索字符串转换为整数会自动删除前导零。