我的网络应用不会向应该获取提醒的某些用户发送提醒。在尝试调试时,python shell中的以下示例让我非常困惑。我有什么遗漏,或在过滤器中做错了吗?
如果没有明显错误,我该如何调试此问题?
>>> now = timezone.now()
>>> an_hour_ago = now - datetime.timedelta(hours=1)
>>> suz = User.objects.get(email="redacted")
>>> suz.reminded
False
>>> suz.wait_until <= now
True
>>> suz.wait_until >= an_hour_ago
True
>>> suz.is_active
True
>>> remindable = User.objects.filter(is_active=True,
... reminded=False,
... wait_until__gte=an_hour_ago,
... wait_until__lte=now)
>>> suz in remindable
False
修改:添加我的用户模型。
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
is_active = models.BooleanField(default=True)
wait_until = models.DateTimeField(null=True, default=None)
# etc.
编辑2 :其他一些背景信息:
我有一个用户完成任务的视图。完成任务后,wait_until
将根据Configuration对象中设置的范围设置为随机时间。该视图中的相关代码:
config = Configuration.objects.first()
min_minutes = config.min_minutes_between_tasks
max_minutes = config.max_minutes_between_tasks
when = now + datetime.timedelta(minutes=randint(min_minutes,
max_minutes+1))
user.wait_until = when
user.alerted = False
user.save()
编辑3 :我不确定发生了什么,但我可能只是个白痴。
我重新启动了我的python shell,suz
现在正按预期在remindable
中正确返回。我怀疑我改变了上面的一个属性并且没有运行suz.save()
。这肯定会解释它。 ORMs ...记得save()
你的记忆中的物品,小孩!
答案 0 :(得分:2)
首先,尽可能将信息添加到问题中。
当背景不足时很难看到问题。
我仍然不知道这是now
:
when = now + datetime.timedelta(minutes=randint(min_minutes,
max_minutes+1))
什么是user.alerted
?如果没关系,请不要显示它。
调试时:
email
)QuerySet
- 包含哪些对象,哪些不是?