Django queryset没有返回所有行

时间:2018-04-18 08:10:59

标签: python django django-queryset

嗨,我有以下设置。

Django 1.9, MongoDB的, pymongo 2.7, mongoengine 0.9

我编写了一个API,用于按用户方式在后端服务器上存储日志。以下是表格样本

user  subject  registered  changed_on
abc    eng      Y          "2018-04-18T00:00:00Z"
abc    maths    N          "2018-04-18T00:10:00Z"
xyz    eng      Y          "2018-04-18T00:10:00Z"

我也已阅读此API,其中我们为过滤器提供用户名和时间戳,如下所示:

{
"user" : "abc",
"from_date" : "2018-04-18T00:00:00Z"
}

正在应用过滤器的 serializers.py 中的行是

Logs.objects.filter(user__iexact='abc',changed_on__gte=from_date)

现在有时当我添加新日志并从邮递员中检索它时,它无法正常工作。我必须重新启动django服务器然后它给我新添加的行。

我不明白为什么会这样。

EDIT1: Full Serializer.py

from rest_framework import serializers

class GetUserLogs(serializers.Serializer):
    user = serializers.CharField(label=_("USER"))
    token = serializers.CharField(label=_("Token"))
    from_date = serializers.CharField(label=_('From date'), default="")
    till_date = serializers.CharField(label=_('Till date'), default=datetime.datetime.now().isoformat().split(".")[0]+'Z')
    def validate(self, attrs):
        user = attrs.get('user')
        token = attrs.get('token')
        from_date = attrs.get('from_date')          
        if user:
            tokendetails = validate_token(token)
            if not tokendetails:
                msg = _('Invalid token.')
                raise serializers.ValidationError(msg)
            else:
                userdetails = tokendetails.user
                if userdetails.check_user(user):
                    rows = Logs.objects.all().filter(user__iexact=user,changed_on__gte=from_date, changed_on__lte = till_date)
                    print(len(rows))
                else:
                    msg = _('Invalid USER)
                    raise serializers.ValidationError(msg)
        else:
            msg = _('Must include "USER".')
            raise serializers.ValidationError(msg)

        attrs['rows'] = rows
        return attrs

1 个答案:

答案 0 :(得分:0)

所以经过近一天的大量调试后,我发现我们设置为系统当前时间戳的till_date的默认值并没有随着时间的增加而增加。所以我将默认值更改为空字符串,并在读取until_date的值后添加到代码下面。

if till_date == "":
    till_date = datetime.datetime.now().isoformat().split(".")[0]+'Z'

每当缺少值时,它会将till_date值重置为当前时间戳。

希望有一天能帮到某人。