Differenza tra Django filtro() e get() metodi

Qual è la differenza tra

mymodel=model.objects.get(name='pol')

e

mymodel=model.objects.filter(name='pol')
InformationsquelleAutor Pol | 2010-07-11

 

6 Replies
  1. 45

    Il Django QuerySet docs sono molto chiaro su questo:

    get(**kwargs)¶

    Restituisce l’oggetto corrispondente dato
    i parametri di ricerca, che dovrebbe essere in
    il formato descritto in Campo le ricerche.

    get() solleva MultipleObjectsReturned
    se più di un oggetto è stato trovato. Il
    MultipleObjectsReturned eccezione è
    un attributo della classe del modello.

    get() genera un’eccezione DoesNotExist
    se un oggetto non è stata trovata per la
    parametri dati. Questa eccezione è
    anche un attributo della classe del modello.

    filter(**kwargs)

    Restituisce un nuovo QuerySet contenente gli oggetti che corrispondono a un dato i parametri di ricerca.

    Uso fondamentalmente get() quando si desidera ottenere un unico oggetto, e filter() quando si desidera ottenere tutti gli oggetti che corrispondono ai tuoi parametri di ricerca.

    • La risposta è utile e mi sono perso alcune cose su get() che Sdolan detto qui
  2. 7

    Anche, su un lato nota, supponendo che pol non è disponibile:

    if mymodel=model.objects.get(name='pol').exists()==False:
       print "Pol does not exist"

    si ottiene:
    AttributeError: ‘Modello’ oggetto non ha l’attributo ‘esiste’

    ma:

    if mymodel=model.objects.filter(name='pol').exists()==False:
       print "Pol does not exist"

    si ottiene: Pol non esiste.

    I. e. Se si desidera eseguire il codice a seconda se un singolo oggetto può essere trovato, utilizzare il filtro. Per qualche motivo esiste() funziona su QuerySet ma non l’oggetto specifico restituito con ottenere.

  3. 5

    Nota che dietro le quinte il django metodo get() viene eseguito il metodo filter (), ma controlla che il filtro set di risultati è esattamente un record

  4. 0

    se sai che si tratta di un oggetto che soddisfa la tua query, utilizzare “get”. Si avrà esito negativo se è più di uno e dà l’errore come questo

    Traceback (most recent call last):
    File "<console>", line 1, in <module>
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 143, in    get
    return self.get_query_set().get(*args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 407, in get
    (self.model._meta.object_name, num))
    MultipleObjectsReturned: get() returned more than one Poll -- it returned 2!

    Altrimenti utilizzare il “filtro”, che ti dà un elenco di oggetti.

  5. 0

    get() restituisce un oggetto che corrisponde al criterio di ricerca.

    filtro() restituisce un QuerySet che corrispondono di ricerca di criterio.

    Per esempio, il seguente

    Entry.objects.filter(pub_date__year=2006)

    è equivalente a

    Entry.objects.all().filter(pub_date__year=2006)

    il che significa che il filtro() è un po ‘ costoso, se il modello di classe ha un gran numero di oggetti, mentre get() è un approccio diretto.

    fonte: Django fare query

  6. -2

    Modello = Dipendente

    Dipendente : nome,età,loc
    Ottenere:

    Dipendente.oggetti.get(id=1)

    Lo farà attraverso un errore se un dato oggetto è non c’è
    Filtro :
    Dipendente.oggetti.filtro(id=1)
    ]>
    Sarà di ritorno vuoto Queryset se un dato oggetto non c’è

Lascia un commento