在我的 django 应用程序中,我有一个带有 DateTimeField“send_date”的 MessageModel。我想过滤消息以让所有消息在某一天(日期)发送。如何将 DateTimeField 与 Date 进行比较以获取当天发送的所有消息。我试过
query_result= MessageLogModel.objects.filter(received_date=myDate)
但它没有显示正确的结果。这是模型的定义
class MessageModel(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE,
related_name='+', verbose_name=_('Destinatario'), editable=False, null=True, blank=True)
subject = models.CharField(verbose_name=_("Asunto"),max_length=50)
send_date = models.DateTimeField(verbose_name=_("Fecha de envío") ,auto_now_add=True)
message_body = models.TextField(verbose_name=_("Mensaje"))
class Meta:
db_table = 'riesgo_message'
managed = True
verbose_name = _("Mensaje")
verbose_name_plural = _("Mensajes")
def __str__(self):
return self.subject
答案 0 :(得分:1)
几种解决方案:
date
) 提供的 __date=
函数: query_result= MessageLogModel.objects.filter(received_date__date=myDate)
或:
query_result= MessageLogModel.objects.filter(received_date__date="2021-06-01")
__range=
: query_result= MessageLogModel.objects.filter(received_date__range=(myDate, myDate + timedelta(days=1)))
__startswith=
或__contains=
,类似__date=
的用法__gt=
和 __lt=
,类似于 __range=
以上所有选项都假设您在特定日期和数据库中存储的数据之间使用相同的时区,如果没有,假设您是否以 UTC 保存日期时间字段,而变量的时区为 {{1} } 不是UTC,那么你可能需要先转换一对UTC的日期时间范围,然后使用myDate
或range
过滤器查询数据库
答案 1 :(得分:0)
如果我理解你:
query_result= MessageLogModel.objects.filter(<received_date/send_date>__date=datetime.date(2021,6,5))
应该可以帮助您。
请注意,您在模型中没有该字段。(因此 <..>)
文档: https://docs.djangoproject.com/en/3.2/ref/models/querysets/#date
答案 2 :(得分:0)
1.获得该日期的结果:
query_result= MessageLogModel.objects.filter(received_date='2021-06-11')
要获得某个日期范围内的结果:给出开始日期和结束日期
query_result = MessageLogModel.objects.filter(received_date__range=['2021-06-01','2021-06-11'])