Frage

Entschuldigt, ich bin völlig neu zu Django und Python.

Ich habe 2 Fragen. Erstens: Wie würde ich mich über das letzte Objekt erstellt bekommen (oder höchste pk) in einer Liste von Objekten? Zum Beispiel weiß ich, dass ich die folgenden verwenden könnte das erste Objekt zu bekommen:

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

Gibt es eine Möglichkeit, die Länge von List.objects zu bekommen? Ich habe versucht, List.objects.length aber ohne Erfolg.

Zweitens ist es möglich, die gleichzeitigen Filter oder kombinieren Listen zu erstellen? Hier ein Beispiel:

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

Ich mag so etwas wie die oben, sondern eher wie:

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

Was ist die korrekte Syntax, wenn überhaupt?

War es hilfreich?

Lösung

Ich habe das noch nicht ausprobiert, aber ich würde Blick auf die QuerySets :

  

neueste (field_name = None)

     

Gibt das letzte Objekt in der   Tabelle, nach Datum, mit dem field_name   zur Verfügung gestellt, wie das Datumsfeld.

     

In diesem Beispiel wird den neuesten Eintrag   in der Tabelle nach dem   pub_date Feld:

     

Entry.objects.latest ( 'pub_date')

     

Wenn Meta Gibt das Modell   get_latest_by, können Sie weglassen, die   field_name Argument neueste ().   Django wird das Feld angegeben verwendet in   get_latest_by standardmäßig aktiviert.

     

Wie get (), neueste () wirft   DoesNotExist, wenn ein Objekt nicht der Fall ist   existiert mit den angegebenen Parametern.

     

Beachten Sie neueste () existiert rein   Bequemlichkeit und Lesbarkeit.

Und das Modell docs auf get_latest_by :

  

get_latest_by

     

Options.get_latest_by

     

Der Name einer Datefield oder Datetimefield im Modell. Dies gibt das Standardfeld in Ihrem Modell-Manager neueste Methode verwenden.

     

Beispiel:

     

get_latest_by = "order_date"

     Siehe

Sie die Dokumentation für die neueste () für mehr.

Edit:. Wade hat eine gute Antwort auf Q () Operator

Andere Tipps

das funktioniert!

Model.objects.latest('field') - Feld-ID sein. das wird die letzte id sein

Für den größten Primärschlüssel, versuchen Sie dies:

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

Beachten Sie, dass pk Verwendung funktioniert unabhängig von den tatsächlichen Namen des Feldes als Primärschlüssel definiert ist.

Da Django 1.6 - letzter

last()

Funktioniert wie first(), sondern gibt das letzte Objekt in der queryset.

Gibt das letzte Objekt der queryset angepasst oder None, wenn kein passendes Objekt ist. Wenn die QuerySet hat keine Reihenfolge definiert ist, dann wird die queryset automatisch vom Primärschlüssel bestellt werden.

list = List.objects.last() gibt Ihnen das letzte Objekt erstellt

Sie können die count () -Methode auf einer Set-Abfrage verwenden, die die Anzahl der Einzelteile erhalten.

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

Argumente zum Filter sind "AND" ed zusammen. Wenn Sie tun oder Filter zu buchen, Q-Objekte. http: //docs.djangoproject .com / de / dev / Themen / db / Abfragen / # Komplex-Lookups-mit-q-Objekte

Alternative für das letzte Objekt erstellt:

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

Es ist notwendig, eine AssertionError für den Fall hinzufügen, wenn es keine Einträge in der Liste sind.

except AssertionError:
   ...

Ich arbeite an Django-Version ist 1.4.22, weder last noch lastet arbeitet. Mein Weg mit minimaler db Laden zu lösen ist, wie:

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

Diese Funktion akzeptiert query_set als Eingabe.

Sie können diese Funktion binden dynamisch, indem Sie:

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

Dann sollten Sie in der Lage sein, das letzte Objekt dieses letzte Stück leicht zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top