Domanda

Ci scusiamo, sono completamente nuovo a Django e Python.

Ho 2 domande. In primo luogo, come potrei fare per ottenere l'ultimo oggetto creato (o più alto pk) in un elenco di oggetti? Per esempio, io so che avrei potuto utilizzare la seguente per ottenere il primo oggetto:

list = List.objects.all()[0]

C'è un modo per ottenere la lunghezza di List.objects? Ho provato List.objects.length ma senza alcun risultato.

In secondo luogo, è possibile creare filtri simultanei o combinare gli elenchi? Ecco un esempio:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number)

Voglio qualcosa di simile a quanto sopra, ma più simile a:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number or home_phone=number)

Qual è la sintassi corretta, se del caso?

È stato utile?

Soluzione

Non ho ancora provato questo, ma mi piacerebbe guardare il ultima () operatore set di query :

  

ultima (nome_campo = None)

     

Restituisce l'ultimo oggetto nella   tavolo, per data, utilizzando il field_name   fornito come il campo data.

     

Questo esempio restituisce la voce più recente   nella tabella, secondo la   campo pub_date:

     

Entry.objects.latest ( 'pub_date')

     

Se specifica Meta del modello   get_latest_by, è possibile lasciare fuori   argomento field_name alla più recente ().   Django utilizzerà il campo specificato in   get_latest_by per impostazione predefinita.

     

Come get (), ultima () solleva   DoesNotExist se un oggetto non lo fa   esistere con i parametri indicati.

     

Nota ultima () esiste esclusivamente per   convenienza e la leggibilità.

E le su get_latest_by :

  

get_latest_by

     

Options.get_latest_by

     

Il nome di un DateField o DateTimeField nel modello. Questa specifica il campo predefinito da utilizzare in ultimo metodo vostro modello di Manager.

     

Esempio:

     

get_latest_by = "order_date"

     

Si veda la documentazione per l'ultimo () per ulteriori informazioni.

Modifica:. Wade ha una buona risposta su Q () Operatore

Altri suggerimenti

questo funziona!

Model.objects.latest('field') - campo può essere id. che sarà l'ultima id

Per la più grande chiave primaria, provate questo:

List.objects.order_by('-pk')[0]

Si noti che usando pk funziona indipendentemente dal nome effettivo del campo definito come la chiave primaria.

Dal Django 1.6 - ultimo

last()

funziona come first(), ma restituisce l'ultimo oggetto nel set di query.

Restituisce l'ultimo oggetto di pari passo con il set di query, o None se non v'è oggetto corrispondente. Se il QuerySet ha definito nessun ordinamento, quindi il set di query è ordinato automaticamente la chiave primaria.

list = List.objects.last() ti dà l'ultimo oggetto creato

È possibile utilizzare il metodo count () su una query impostare il ottenere il numero di oggetti.

list = List.objects.all()
list.count()

Gli argomenti a filtro sono "E" ed insieme. Se avete bisogno di fare o filtri guardare gli oggetti Q. http: //docs.djangoproject .com / it / dev / argomenti / db / query / # complesse-ricerche-con-Q-oggetti

alternativa per l'ultimo oggetto creato:

List.objects.all()[List.objects.count()-1]

E 'necessario aggiungere un AssertionError per il caso in cui non ci sono voci nell'elenco.

except AssertionError:
   ...

Sto lavorando su versione Django è 1.4.22, né lastlastet sta lavorando. Il mio modo di risolvere con un minimo di db di carico è come:

latest = lambda model_objects, field : model_objects.values_list( field, flat = True ).order_by( "-" + field )[ 0 ]
latest_pk = latest( List.objects, "pk" )

Questa funzione accetta query_set come input.

È possibile associare questa funzione in modo dinamico facendo:

import types
List.objects.latest = types.MethodType( latest, List.objects )

Poi si dovrebbe essere in grado di ottenere l'ultimo oggetto da questo ultimo pk facilmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top