Django搜索查询功能,例如Django admin或Django rest framework

我正在尝试寻找一种适当的方法来为我的模型字段提供搜索功能,例如Django的admin或Django rest框架的搜索功能。

假设我有这个模型,我想搜索所有字段。

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()的无效文字

所以现在我想到的是这样的东西,以捕获任何Value错误并从过滤器中排除整数搜索:

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) |
    )

我希望有个更好的方法。还是我不知道的字段查找功能?

lkzkq 回答:Django搜索查询功能,例如Django admin或Django rest framework

您快到了,只需删除int查找上的mobile__icontains转换:它将由ORM处理。

,

对于我的项目,字段数很大,因此使用了外部程序包(django-filter)来处理搜索,程序包的URL为https://django-filter.readthedocs.io/en/master/index.html

本文链接:https://www.f2er.com/3075807.html

大家都在问