Django 搜索查询功能,如 Django admin 或 Django rest framework
Django search query feature like Django admin or Django rest framework
我正在尝试找到一种正确的方法来为我的模型字段(例如 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: invalid literal for int() with base 10
所以现在我想到的是这样的,以捕获任何值错误并从过滤器中排除整数搜索:
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) |
)
我希望有比这更好的方法。或者可能是我不知道的字段查找功能?
您快完成了,只需删除 mobile__icontains
查找中的 int
转换:它将由 ORM 处理。
对于我的项目,字段的数量很大,所以使用外部包(django-filter)来处理搜索 url 要打包的是 https://django-filter.readthedocs.io/en/master/index.html
我正在尝试找到一种正确的方法来为我的模型字段(例如 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: invalid literal for int() with base 10
所以现在我想到的是这样的,以捕获任何值错误并从过滤器中排除整数搜索:
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) |
)
我希望有比这更好的方法。或者可能是我不知道的字段查找功能?
您快完成了,只需删除 mobile__icontains
查找中的 int
转换:它将由 ORM 处理。
对于我的项目,字段的数量很大,所以使用外部包(django-filter)来处理搜索 url 要打包的是 https://django-filter.readthedocs.io/en/master/index.html