多字段多值Django搜索

多字段多值Django搜索,django,model,django-queryset,Django,Model,Django Queryset,我有一个模型,它存储用户的登录注销时间和日期 class LoginLogout(models.Model): username = models.CharField(max_length=30, unique=True) date = models.DateField(auto_now_add=True) login_time = models.TimeField() logout_time = models.TimeField(null=True, blank

我有一个模型,它存储用户的登录注销时间和日期

class LoginLogout(models.Model):
    username = models.CharField(max_length=30, unique=True)
    date = models.DateField(auto_now_add=True)
    login_time = models.TimeField()
    logout_time = models.TimeField(null=True, blank=True)

现在,我需要在这个模型中按字段日期用户名进行搜索。我有一个表单,它将日期从日期到用户名作为输入。任何字段都可以为空。如果用户名空白将返回所有结果。现在,实现所需查询集的查询集是什么

这应该可以完成以下工作:

if not username:
    return LoginLogout.objects.all()
else:
    return LoginLogout.objects.filter(date__gte=date_from,
                                      date__lte=date_to,
                                      username=username)

这应该可以完成以下工作:

if not username:
    return LoginLogout.objects.all()
else:
    return LoginLogout.objects.filter(date__gte=date_from,
                                      date__lte=date_to,
                                      username=username)

你必须使用很多,否则

我只是问你一个问题

# Case 1: All res:
res = LoginLogout.objects.all()
# Case 2: date_to is blank:
res = LoginLogout.objects.filter(login_time__gt = date_from)
# Case 3: date_from is blank
res = LoginLogout.Objects.filter(logout_time__lt = date_to)
# Case 4: all value
res = LoginLogout.Objects.filter( Q(username= username) & Q(login_...) & Q(logout_...)
# Or:
res = LoginLogout.Objects.filter(username= username, login_time__gt = ...)

你必须使用很多,否则

我只是问你一个问题

# Case 1: All res:
res = LoginLogout.objects.all()
# Case 2: date_to is blank:
res = LoginLogout.objects.filter(login_time__gt = date_from)
# Case 3: date_from is blank
res = LoginLogout.Objects.filter(logout_time__lt = date_to)
# Case 4: all value
res = LoginLogout.Objects.filter( Q(username= username) & Q(login_...) & Q(logout_...)
# Or:
res = LoginLogout.Objects.filter(username= username, login_time__gt = ...)
试试这个:

from django.db.models import Q

if username or date_from or date_to:
    LoginLogout.objects.filter(
                               Q(username=username),
                               Q(date__gt='date_from'),
                               Q(date__lt='date_to')
                              )
else:
    LoginLogout.objects.all()
试试这个:

from django.db.models import Q

if username or date_from or date_to:
    LoginLogout.objects.filter(
                               Q(username=username),
                               Q(date__gt='date_from'),
                               Q(date__lt='date_to')
                              )
else:
    LoginLogout.objects.all()
我需要按字段日期和用户名在此模型中搜索。我有一个表单,它以date\u from、date\u to和username作为输入

你想了解

events=LoginLogout.objects.filter(
用户名=用户名,
日期=开始日期,
日期=截止日期,
)
任何字段都可以为空。如果用户名为空,将返回所有结果

这些是特殊条件,应该在代码中表示为特殊条件

filter_args={}
如果用户名:
过滤器参数['username']=用户名
如果日期从:
筛选参数['date\uu ge']=日期自
如果日期为:
筛选器参数['date\uu le']=日期到
events=LoginLogout.objects.filter(**filter\u args)
我需要按字段日期和用户名在此模型中搜索。我有一个表单,它以date\u from、date\u to和username作为输入

你想了解

events=LoginLogout.objects.filter(
用户名=用户名,
日期=开始日期,
日期=截止日期,
)
任何字段都可以为空。如果用户名为空,将返回所有结果

这些是特殊条件,应该在代码中表示为特殊条件

filter_args={}
如果用户名:
过滤器参数['username']=用户名
如果日期从:
筛选参数['date\uu ge']=日期自
如果日期为:
筛选器参数['date\uu le']=日期到
events=LoginLogout.objects.filter(**filter\u args)

谢谢您的回答。但是我希望避免很多,先生,你不能为用户付出艰苦的努力。你必须把它放在你身边。如果你不想要太多,如果,否则。只需设置数据的默认值(比如:logout\u time=now,login\u time=1970…)就太简单了,谢谢你的回答。但是我希望避免很多,先生,你不能为用户付出艰苦的努力。你必须把它放在你身边。如果你不想要太多,如果,否则。只需设置数据的默认值(比如:logout\u time=now,login\u time=1970…),这太简单了