0

次のクエリがあります。

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

ただし、order_itemNULL の場合、上記のクエリは無効になります (NULL オブジェクトには due_date がないため)。

この場合、次のようにするにはどうすればよいでしょうか。

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. 2 つのクエリセットを結合します。

このような:

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') 

アクセスは別物です。これは、order_item のない obj に到達するまで due_dates を出力し、AttributeError: 'NoneType' object has no attribute 'due_date' を発生させます。

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