Django:使用元组过滤组合列

时间:2017-08-22 15:12:13

标签: python django filter

如何使用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')

现在我需要过滤掉在给定的已知消息之前订购的消息。

2 个答案:

答案 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])