Django过滤器:SQLite和PostgreSQL之间的过滤结果不同
我在数据库表上运行了一个相对简单的查询;过滤器检查两个日期字段的值并返回查询集。选中的字段是编写的\u报告\u收到的和子床\u完成的。如果收到的编写的报告有一个日期集,而subbed\u complete没有日期集,则将返回一个结果。 如果这两个字段都设置了日期,则不会返回任何结果。 (然后对返回的任何结果与当前日期之间的“未付天数”进行简单计算。) 在SQLite数据库上本地运行时,这种方法非常有效,但当我上传到heroku以便与PostgreSQL数据库一起使用时,过滤器似乎不起作用,因为它似乎忽略了subbed_complete字段中的任何日期值。我不明白为什么不。SQLite和PostgreSQL处理过滤器的方式有区别吗?我找不到任何表明这一点的文件Django过滤器:SQLite和PostgreSQL之间的过滤结果不同,django,postgresql,sqlite,django-queryset,Django,Postgresql,Sqlite,Django Queryset,我在数据库表上运行了一个相对简单的查询;过滤器检查两个日期字段的值并返回查询集。选中的字段是编写的\u报告\u收到的和子床\u完成的。如果收到的编写的报告有一个日期集,而subbed\u complete没有日期集,则将返回一个结果。 如果这两个字段都设置了日期,则不会返回任何结果。 (然后对返回的任何结果与当前日期之间的“未付天数”进行简单计算。) 在SQLite数据库上本地运行时,这种方法非常有效,但当我上传到heroku以便与PostgreSQL数据库一起使用时,过滤器似乎不起作用,因为它
# views.py
class EpgReportSubeditListView(LoginRequiredMixin, EpgUserPassesTestMixin, ListView):
"""EPG-only: create a list view of reports currently being subedited
"""
model = Report
template_name = 'tracker/epg_report_subedit.html'
context_object_name = 'report_subedit'
ordering = ['subeditor']
def get_queryset(self):
today = datetime.now().date()
out = []
for obj in (self.model.objects.filter(subbed_complete__isnull=True) and self.model.objects.filter(authored_report_received__isnull=False)):
setattr(obj, 'days_diff', (today - obj.authored_report_received).days)
out.append(obj)
return out
# models.py
class Report(models.Model):
"""Define fields for Report object (representing a case report)
"""
case = models.ForeignKey(Case, on_delete=models.CASCADE, related_name='reports')
editor = models.ForeignKey(User, on_delete=False,
limit_choices_to={'groups__name': 'editors'},
related_name='editor', null=True)
# editing workflow info
authored_report_received = models.DateField(null=True, blank=True)
subbed_complete = models.DateField(null=True, blank=True)
subeditor = models.ForeignKey(User, on_delete=False,
limit_choices_to={'groups__name': 'subeditors'},
related_name='subeditor', null=True, blank=True)
sent_to_editor = models.DateField(null=True, blank=True)
edited = models.DateField(null=True, blank=True)
reporter_queries = models.CharField(max_length=3,
choices=Binary_Choices,
default="n")
sent_to_deskeditor = models.DateField(null=True, blank=True)
taken_by_deskeditor = models.DateField(null=True, blank=True)
deskeditor = models.ForeignKey(User, on_delete=False,
limit_choices_to={'groups__name': 'deskeditors'},
related_name='deskeditor', null=True, blank=True)
deskedit_complete = models.DateField(null=True, blank=True)
sent_to_counsel = models.DateField(null=True, blank=True)
received_from_counsel = models.DateField(null=True, blank=True)
date_editor_publish_approve = models.DateField(null=True, blank=True)
def get_absolute_url(self):
return reverse("epg_home")
def __str__(self):
return f'{self.case} | f: {self.filename}'
Sqlite和PostgreSQL处理日期的方式不同
subbed\u complete
是一个models.DateField
字段,但sqlite3:
没有为存储日期和/或日期而预留的存储类
时代。相反,SQLite的内置日期和时间函数是
能够将日期和时间存储为文本、实数或整数值:
应用程序可以选择以其中任何一种格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换
因此,您应该使用postgresql在另一个环境中测试代码并调整查询