gpt4 book ai didi

python - Django 将 MySQL 查询转换为 Django 查询

转载 作者:行者123 更新时间:2023-11-29 18:10:06 24 4
gpt4 key购买 nike

如何在 Django View 中获得与此 MySQL 脚本等效的内容?出发城市、到达城市和旅行日期将由用户输入。

这是我的模型

class Driver(models.Model):
first_name = models.CharField(max_length=30, null=True, blank=False)
last_name = models.CharField(max_length=30, null=True, blank=False)




class Schedule(models.Model):
depart_time = models.TimeField()
arrive_time = models.TimeField()



class TravelDate(models.Model):
start_date = models.DateField(null = True)
interval = models.IntegerField(null = True)


class Route(models.Model):
depart_city = models.CharField(max_length=50, null=True, blank=False)
arrive_city = models.CharField(max_length=50, null=True, blank=False)
driver = models.ForeignKey(Driver)
schedule = models.ForeignKey(Schedule)
traveldate = models.ForeignKey(TravelDate)

这是我的 MySQL 脚本。当我在 MySQL 工作台上运行它时,这是有效的,但我不确定如何将其转换为 Django 查询

    SELECT busapp_route.depart_city, busapp_route.arrive_city, busapp_driver.first_name, busapp_schedule.depart_time 
FROM (((busapp_route INNER JOIN busapp_driver ON busapp_route.driver_id = busapp_driver.id)
INNER JOIN busapp_schedule ON busapp_route.schedule_id = busapp_schedule.id)
INNER JOIN busapp_traveldate ON busapp_route.traveldate_id = busapp_traveldate.id)
WHERE busapp_route.depart_city='Tropoje' AND busapp_route.arrive_city='Tirane'
AND (DATEDIFF('2017-11-26', busapp_traveldate.start_date) % busapp_traveldate.interval = 0);

最佳答案

Django 本身不支持 MySQL DATEDIFF。作为解决方法,您可以使用如下内容:

from django.db.models.expressions import RawSQL

routes = Route.objects\
.values('depart_city', 'arrive_city', 'driver__first_name', 'schedule__depart_time', 'traveldate__start_date')\
.annotate(datediff_mod=RawSQL("DATEDIFF(%s, busapp_traveldate.start_date) MOD busapp_traveldate.interval", ('2017-11-26', )))\
.filter(depart_city='Tropoje', arrive_city='Tirane', datediff_mod = 0)

我不使用 MySQL,所以我无法测试它,但我很确定它应该可以工作,或者至少可以让您了解如何实现它。

关于python - Django 将 MySQL 查询转换为 Django 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47481714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com