我正在使用Django預約系統!我想展示今天的約會。這個原始查詢必須返回今天的記錄,但它不返回任何記錄!Django原始SQL查詢不返回今天的記錄
查詢看起來像這樣:
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()
。
我試着在shell中使用Appointment.objects.filter(date=today)
運行類似的查詢,它工作正常!
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()
請勿使用。 '.format()'在任何SQL查詢上。它容易受到SQL注入的影響。在字符串中使用'%s'並將參數作爲列表提交。示例:https://docs.djangoproject.com/en/1.9/topics/db/sql/#executing-custom-sql-directly –
此外:您可以通過ORM輕鬆完成您的工作。 –
有關如何使用ORM做到這一點的任何建議?我是django的新手,這就像我第一個完整的項目!欣賞它! – Ketan