Kannst du bedingte order_by / regroup in Django machen?

  • Ich habe ein Modell "Status" mit den Feldern project_id und timestamp. project_id ist manchmal null, wenn der Status nicht mit einem Projekt verknüpft ist (genauer gesagt, wenn der Status auftritt, bevor wir wissen, welches Projekt es verursacht hat).

    Ich möchte So ordnen Sie eine Ausgabetabelle folgendermaßen an:

    • Gruppenzustände mit demselben project_id zusammen
    • gruppieren Sie nicht null project_id s zusammen
    • ordnen diese Gruppen und Singletons nach dem neuesten Zeitstempel jeder Gruppe / Singleton

    Can das getan werden Ich kann es fast erreichen, indem ich nur nach Zeitstempel sortiere und dann Re-Gruppierung benutze. Das ist "fast" richtig, weil eine Gruppe identischer project_ids durch dazwischenliegende Nullen aufgeteilt werden kann.

    Ich bin mir ziemlich sicher, dass dies in SQL möglich ist (GROUP BY isnull (experiment_id, -id)), aber erlaubt Django das?

    22 November 2011
    Steve BennettDustin Davidson
1 answer
  • Für die Aggregation in Django ist es besser, rohe SQL zu verwenden, da diese wesentlich schneller ist als die generierte ORM-SQL. unkomplizierte SQL-Django-Dokumente

    22 November 2011
    mossplix