sql >> Database >  >> RDS >> PostgreSQL

Hoe vraag ik de lengte van een Django ArrayField op?

De extra() functie is verouderd volgens de docs :

Hier leest u hoe u hetzelfde kunt doen met een aangepaste Annotatie functie:

from django.db import models

class ArrayLength(models.Func):
    function = 'CARDINALITY'

MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')

Merk op dat de kardinaliteit() functie is beschikbaar in PostgreSQL 9.4 of hoger. Als je een oudere versie gebruikt, moet je array_length() :

MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

Een waarschuwing bij deze tweede query is dat een lege array voor alle niet-lege wordt gesorteerd. Dit kan worden opgelost door NULL . samen te voegen waarden van array_length naar 0.



  1. Vergelijk meerdere perioden

  2. op rollen gebaseerde applicatie bouwen

  3. Selectievakjes gebruiken om specifieke gegevens in een database op te halen

  4. Rails tonen laatste waarde na groepering