如何使用Django ORM生成此类where
子句?
where (datetime, id) < (%last_datetime, %last_id)
背景
我有一个这样的模型:
class Messages(models.Model):
# Implicit "id" serial primary key
datetime = models.DateTimeField(db_index=True)
message = models.CharField(max_length=1024)
我按datetime
对邮件进行排序,并使用id
作为并列排序,以便在多封邮件具有相同datetime
的情况下进行一致排序:
Messages.objects.order_by('datetime', 'id')
现在我需要过滤掉在给定的已知消息之前订购的消息。
答案 0 :(得分:1)
有点令人费解,但我认为这样可行:
Messages.objects.filter(datetime__lte=x).exclude(datetime=x, id__gt=y)
答案 1 :(得分:0)
您可以使用objects.filter()
:
relevant_messages = Messages.objects.filter(datetime__range=[start_date_string, end_date_string])
我也非常确定您可以将order_by()
和filter()
电话联系在一起:
relevant_messages = Messages.objects.order_by('datetime', 'id').filter(datetime__range=[start_date_string, end_date_string])