Ich habe die von sfletche bereitgestellten Vorschläge zur Verwendung von Annotate angenommen und das Problem im freenode.net-IRC-Kanal #django diskutiert.
Die Benutzer FunkyBob und jtiai konnten mir dabei helfen, es zum Laufen zu bringen.
Da es für jeden Arbeitsauftrag viele Termine geben kann, wird, wenn wir ihn auffordern, nach Terminen zu bestellen, eine Zeile für jeden Termin zurückgegeben, da er nicht weiß, nach welchem Termin ich bestellen wollte.
from django.db.models import Max
WorkOrder.objects.annotate(max_date=Max('appointment__start')).filter(work_order_status="complete").order_by('max_date')
Wir waren also auf dem richtigen Weg, es ging nur darum, die Syntax zu korrigieren.
Danke für die Hilfe sfletche, FunkyBob und jtiai.