2017-06-05 9 views
0

私は今、私はフィールド日付ユーザ名することにより、このモデルで検索する必要があるユーザー複数の分野でのDjango検索

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) 

のログインログアウト時刻と日付を格納したモデルを持っています。私はdate_from,date_toというユーザー名を入力します。入力はです。どのフィールドも空白にすることができます。 ユーザ名の場合、のすべての結果が返されます。今、目的のクエリーセットを達成するためのクエリーセットは何でしょうか。

答えて

1

このモデルでは、フィールドの日付とユーザー名で検索する必要があります。私はdate_from、date_toとusernameを入力として受け取るフォームを持っています。

Django's query expressionsについて知りたい。

events = LoginLogout.objects.filter(
     username=username, 
     date__ge=date_from, 
     date__le=date_to, 
) 

任意のフィールドは空白にすることができます。ユーザー名が空白の場合、すべての結果が返されます。

これらは特殊な条件であり、コード内にそのように表現する必要があります。

filter_args = {} 
if username: 
    filter_args['username'] = username 
    if date_from: 
     filter_args['date__ge'] = date_from 
    if date_to: 
     filter_args['date__le'] = date_to 
events = LoginLogout.objects.filter(**filter_args) 
+0

です。ありがとう –

1

これは、作業を行う必要があります。

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

あなたが他の場合、多くを使用する必要がありますが...

私はちょうどこの試す

# 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 = ...) 
+0

ご回答ありがとうございます。しかし、私は他にもたくさんの人を避けたいと思っていました。 –

+0

先生、あなたはユーザーのために勤勉を与えることはできません。あなたはあなたの側にそれを持っていなければなりません。そしてもしあなたがあまりにも多くを望んでいなければ、そうでなければ。データのDEFAULT値を設定するだけです(logout_time = now、login_time = 1970 ....)。それはあまりにもez方法 –

0

あなたのクエリを与える:

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() 
関連する問題