sql >> Databasteknik >  >> RDS >> PostgreSQL

Django ORM jämför tupler / lexikografisk ordning

Nedan är ett sätt som fungerar i Django pre 3.2, med annotate (som också tyvärr behöver det lilla hacket för att ställa in ett output_field , även om värdet inte används).

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

I Django 3.2+ kan du tydligen använda alias istället för annotate

Detta fungerar eftersom det som kallas en tuppel, faktiskt är en förkortning för en Radkonstruktör , dvs. (col_a, col_b) är samma sak som ROW(col_a, col_b)

Ovanstående baseras på informationen i denna biljett




  1. Laravel 5.1 - Ordna efter två kolumner som inte fungerar som avsett

  2. anpassad id primärnyckel kan inte hämtas efter Laravel save()-metoden

  3. Hur hanterar man MySQL tung trafik?

  4. MySQL:Välj data från en tabell där datumet infaller i den aktuella veckan och den aktuella månaden