sql >> Databáze >  >> RDS >> PostgreSQL

Django ORM porovná n-tice / lexikografické řazení

Níže je uveden způsob, který funguje v Django před 3.2, pomocí annotate (což také bohužel vyžaduje drobný hack nastavení output_field , i když hodnota není použita).

from django.db.models import F, Func, TextField

col_a_col_b = Func(F('col_a'), F('col_b'), function='ROW', output_type=TextField())
col_a_col_b_from = Func(col_a_value, col_b_value, function='ROW')

filtered_queryset = queryset \
    .annotate(col_a_col_b=col_a_col_b) \
    .filter(col_a_col_b__gt=col_a_col_b_from) \
    .order_by('col_a', 'col_b')

V Django 3.2+ můžete zjevně použít alias místo annotate

To funguje, protože to, co se nazývá n-tice, je ve skutečnosti zkratka pro Řádkový konstruktor , tj. (col_a, col_b) je to samé jako ROW(col_a, col_b)

Výše uvedené je založeno na informacích v tomto tiketu




  1. Vypočítejte hodnotu percentilu pomocí MySQL

  2. QSqlDatabase open vždy po aktualizaci vrátí hodnotu true

  3. Jaká je alternativa MySQL k funkci NEXT_DAY společnosti Oracle?

  4. Klauzule LIKE Mysql a samostatná slova v poli