Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用年和月筛选查询集_Python_Django_Python 3.x - Fatal编程技术网

Python 无法使用年和月筛选查询集

Python 无法使用年和月筛选查询集,python,django,python-3.x,Python,Django,Python 3.x,我的模型是: class Procedure(models.Model): procid = models.AutoField(primary_key=True, unique=True) timestr = models.DateTimeField(default=timezone.now) template = models.ForeignKey(ProcedureTemplate, on_delete=models.CASCADE, blank=True, null

我的模型是:

class Procedure(models.Model):
    procid = models.AutoField(primary_key=True, unique=True)
    timestr = models.DateTimeField(default=timezone.now)
    template = models.ForeignKey(ProcedureTemplate, on_delete=models.CASCADE, blank=True, null=True)
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)
    doctor = models.ForeignKey(doctor, on_delete=models.SET_NULL, blank=True, null=True)
    customer = models.ForeignKey(customer, on_delete=models.CASCADE, null=False)
我正在尝试对模型属性按年份和月份筛选查询集

如果我按年份筛选:

procedures = Procedure.objects.filter(clinic = clinicobj, timestr__year=2020)
for proc in procedures:
    print(f'{proc.pk} {proc.timestr}')
我得到:

66 2020-01-08 12:38:37.237585+00:00
67 2020-01-11 15:40:00.344492+00:00
68 2020-01-12 04:50:56.190794+00:00
69 2020-01-26 05:58:36.962205+00:00
70 2020-01-29 09:51:59.038017+00:00
71 2020-02-01 14:24:18.921779+00:00
72 2020-02-09 06:20:30.993496+00:00
73 2020-02-15 10:23:09.068201+00:00
74 2020-02-15 14:04:29.368066+00:00
75 2020-02-16 06:25:09.702327+00:00
76 2020-02-19 14:05:19.369457+00:00
77 2020-02-20 11:13:35.934392+00:00
然而,当我试图通过增加月份来缩小范围时,我没有得到任何结果。这里怎么了

Procedure.objects.filter(clinic = clinicobj, timestr__year=2020, timestr__month=2)

<QuerySet []>

Procedure.objects.filter(clinic = clinicobj, timestr__year=2020).filter(clinic = clinicobj, timestr__month=2)

<QuerySet []>
Procedure.objects.filter(clinic=clinicobj,timestr\uuu year=2020,timestr\uuu month=2)
Procedure.objects.filter(clinic=clinicobj,timestr\u year=2020)。filter(clinic=clinicobj,timestr\u month=2)

取决于文档

当USE_TZ为True时,datetime字段将在筛选之前转换为当前时区。这需要在数据库中定义时区

因此,如果您使用mysql,您可以安装pytz并使用加载时区表


您也可以使用django。我希望它对您有所帮助。

切换到使用
提取*
,并建议检查用于保存日期时间值的时区

使用时_TZ=True。使用(时区。使_知晓(值))转换日期时间

结果

71 2020-02-01 14:24:18.921779+00:00
72 2020-02-09 06:20:30.993496+00:00
73 2020-02-15 10:23:09.068201+00:00
74 2020-02-15 14:04:29.368066+00:00
75 2020-02-16 06:25:09.702327+00:00
76 2020-02-19 14:05:19.369457+00:00
77 2020-02-20 11:13:35.934392+00:00

你能分享你的模型吗?@kamilyrb我已经分享了。我想这个月需要一个领先的零。请尝试
timestr\uu month='02'
是否可以将此行添加到settings.py中,然后重试?使用_TZ=false,我可以测试。但我的应用程序确实需要时区。添加前导零没有帮助。
71 2020-02-01 14:24:18.921779+00:00
72 2020-02-09 06:20:30.993496+00:00
73 2020-02-15 10:23:09.068201+00:00
74 2020-02-15 14:04:29.368066+00:00
75 2020-02-16 06:25:09.702327+00:00
76 2020-02-19 14:05:19.369457+00:00
77 2020-02-20 11:13:35.934392+00:00