title: How can I include a conditional order_by in django?
body: <p>I need to sort two parts of a queryset differently based on a boolean field.
  - Rows that have bool_val == True should come first, and be sorted by date_a, ascending.
  - Rows that have bool_val == False should come second, and be sorted by date_b, descending.</p>
  
  <p>The closest I've gotten is</p>
  
  <pre><code>MyModel.objects.all().annotate(
      sort_order=Case(
          When(bool_val=True, then=('date_a')), 
          default='date_b')
      ).order_by('-bool_val', 'sort_order')
  </code></pre>
  
  <p>But that sorts them all in the same order. If the value I needed to sort by were numerical, then I would multiply one set by -1 in my annotation, but they're date values, so that won't work.</p>
  
  <p>I've also looked into creating two separate querysets and combining them, but union() isn't available until 1.11 and I have to support 1.10, and other methods of combining querysets that I've found either don't preserve order or don't result in a queryset (or both). (I'm not clear on whether union() preserves order or not, but it's moot, so I didn't dig into it much, either.) This has to be a django QuerySet object at the end.</p>