0

我有以下查询:

tasks = tasks.order_by('order_item__due_date', 'title__name')

但是,order_item可能为 NULL,在这种情况下,上述查询将无效(因为 NULL 对象没有到期日期)。

在这种情况下,我将如何执行以下操作:

tasks = tasks.order_by('order_item__due_date' if order_item, 'title_name')
4

1 回答 1

3

错误是什么?如果它没有坏,就不要修理它。;)

你可以:

  1. 选择所有没有 order_item 的任务并按标题排序。
  2. 选择带有 order_item 的所有任务,并按 order_item__due_date 对其进行排序。
  3. 加入两个查询集。

像这样:

tasks = Tasks.objects.all() 
objects_by_title = tasks.objects.filter(order_item__isnull=True).order_by('title')
objects_by_due_date = tasks.objects.filter(order_item__isnull=False).order_by('order_item__due_date')
queryset = objects_by_title | objects_by_due_date

更新:

即使 order_item 为 Null,您的代码也可以正常工作。

tasks = tasks.order_by('order_item__due_date', 'title__name') 

访问是另一回事。这将打印due_dates,直到它到达没有order_item的obj,而不是引发AttributeError:'NoneType'对象没有属性'due_date'。

for obj in tasks: 
    print obj.order_item.due_date
于 2013-09-26T23:21:19.257 回答