Django Raw SQL查询不返回今天的记录

时间:2016-07-31 04:47:35

标签: python django django-models

我正在使用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()

1 个答案:

答案 0 :(得分:0)

Date是一个DateField,因此您需要将其与日期进行比较,而不是日期的格式化表示(请参阅此答案:https://stackoverflow.com/a/18505739/5679413)。通过使用格式,您今天将转换为数字和破折号。您的SQL查询需要将其重新转换为日期。 Django可能会为你解决这个问题。