django - Django 搜索查询功能,如 Django admin 或 Django rest 框架
问题描述
我试图找出一种正确的方法来为我的模型字段(如 Django 的管理员或 Django 休息框架的搜索功能)创建搜索功能。
假设我有这个模型,我想搜索所有字段。:
class User(models.Model):
email = models.EmailField(
unique=True,
max_length=254,
)
first_name = models.CharField(max_length=15)
last_name = models.CharField(max_length=15)
mobile = models.BigIntegerField(unique=True)
首先,我尝试了这种方式:
user_list = User.objects.filter(
Q(id__icontains=int(search_input)) |
Q(email__icontains=search_input) |
Q(first_name__icontains=search_input) |
Q(last_name__icontains=search_input) |
Q(mobile__icontains=int(search_input))
)
如果我只使用整数搜索词进行过滤,这可以正常工作。但是,如果我传递一个字符串值,这会中断并给我一个错误:
ValueError:以 10 为底的 int() 的无效文字
所以现在我想出的是这样的,捕捉任何值错误并从过滤器中排除整数搜索:
try:
user_list = User.objects.filter(
Q(id__icontains=int(search_input)) |
Q(email__icontains=search_input) |
Q(first_name__icontains=search_input) |
Q(last_name__icontains=search_input) |
Q(mobile__icontains=int(search_input))
)
except ValueError as e:
user_list = User.objects.filter(
Q(email__icontains=search_input) |
Q(first_name__icontains=search_input) |
Q(last_name__icontains=search_input) |
)
我希望有比这更好的方法。或者也许是我不知道的字段查找功能?
解决方案
您快到了,只需int
在查找中删除转换mobile__icontains
:它将由 ORM 处理。
推荐阅读
- python - How to plot a 2d cartesian array as a polar heatmap
- javascript - I can't get a response from github api using redux with react.js
- javascript - Javascript addEventListener 不适用于 Chrome 但 Firefox
- web-component - Stencil Component - use querySelector() to select element within the shadow dom
- reactjs - google-map-react not showing up
- asp.net-core - Get User Info From Access Token WebApi Asp.net Core
- javascript - 我们如何在主函数中调用带有参数的函数
- sql - 在插入任何数据之前如何在 Oracle SQL 中进行有效查询
- flutter - in_app_purchase 包颤动
- angular - ts 文件中下拉列表的翻译