我正在使用Django预约系统!我想展示今天的约会。这个原始查询必须返回今天的记录,但它不会返回任何记录!
查询如下所示:
todays_appointments = Appointment.objects.raw("""
SELECT appointment_Appointment.id,
loginReg_User.user_name,
appointment_Appointment.task,
appointment_Appointment.date,
appointment_Appointment.time,
appointment_Appointment.status
FROM appointment_Appointment
LEFT JOIN loginReg_User
ON appointment_Appointment.user_id = loginReg_User.id
WHERE loginReg_User.id={}
AND appointment_Appointment.date={}
ORDER BY appointment_Appointment.time".format(user_id, today"""))
此外,today
看起来像这样:
today = datetime.date.today()
。
我尝试使用Appointment.objects.filter(date=today)
在shell中运行类似的查询,但它运行正常!
Models.py
from __future__ import unicode_literals
from ..loginReg.models import User
from django.db import models
import datetime
class AppointmentValidator(models.Manager):
def task_validator(self, task):
if len(task) < 1:
return False
else:
return True
def date_validator(self, date_time):
present = datetime.now().date()
if date_time < present:
return False
else:
return True
def status(self, status):
if status == "missed" or status == "done" or status == "pending":
return True
else:
return False
class Queries(models.Manager):
def todays_appointments(self, user_id):
today = datetime.date.today()
todays_appointments = Appointment.objects.raw("SELECT appointment_Appointment.id, loginReg_User.user_name, appointment_Appointment.task, appointment_Appointment.date, appointment_Appointment.time, appointment_Appointment.status FROM appointment_Appointment LEFT JOIN loginReg_User ON appointment_Appointment.user_id = loginReg_User.id WHERE loginReg_User.id={} AND appointment_Appointment.date={} ORDER BY appointment_Appointment.time".format(user_id, today))
return todays_appointments
def other_appointments(self, user_id):
today = datetime.date.today()
other_appointments = `Appointment.objects.raw("SELECT appointment_Appointment.id, loginReg_User.user_name, appointment_Appointment.task, appointment_Appointment.date, appointment_Appointment.time, appointment_Appointment.status FROM appointment_Appointment LEFT JOIN loginReg_User ON appointment_Appointment.user_id = loginReg_User.id WHERE loginReg_User.id={} AND appointment_Appointment.date>{} ORDER BY appointment_Appointment.time".format(user_id, today))`
return other_appointments
class Appointment(models.Model):
task = models.CharField(max_length=150)
date = models.DateField(null=False, blank=False)
time = models.TimeField()
status = models.CharField(max_length=45)
user = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
appointmentManager = AppointmentValidator()
queries = Queries()
objects = models.Manager()
答案 0 :(得分:0)
Date是一个DateField,因此您需要将其与日期进行比较,而不是日期的格式化表示(请参阅此答案:https://stackoverflow.com/a/18505739/5679413)。通过使用格式,您今天将转换为数字和破折号。您的SQL查询需要将其重新转换为日期。 Django可能会为你解决这个问题。