Question

Toutes mes excuses, je suis tout à fait nouveau à Django et Python.

J'ai 2 questions. Tout d'abord, comment pourrais-je obtenir le dernier objet créé (ou le plus pk) dans une liste d'objets? Par exemple, je sais que je pourrais utiliser ce qui suit pour obtenir le premier objet:

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

Y at-il un moyen d'obtenir la longueur de List.objects? J'ai essayé List.objects.length mais en vain.

Deuxièmement, est-il possible de créer des filtres simultanés ou combiner des listes? Voici un exemple:

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

Je veux quelque chose comme ce qui précède, mais plus comme:

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

Quelle est la syntaxe correcte, le cas échéant?

Était-ce utile?

La solution

Je ne l'ai pas encore essayé, mais je regarderais le QuerySets :

  

dernier (field_name = None)

     

Renvoie le dernier objet dans la   table, par date, en utilisant le field_name   à condition que le champ de date.

     

Cet exemple renvoie la dernière entrée   dans le tableau, en fonction de la   champ pub_date:

     

Entry.objects.latest ( 'pub_date')

     

Si les Meta spécifie votre modèle   get_latest_by, vous pouvez laisser tomber le   l'argument field_name à la dernière ().   Django utilisera le champ spécifié dans   get_latest_by par défaut.

     

Comme get (), le dernier () soulève   DoesNotExist si un objet ne   exister avec les paramètres donnés.

     

Notez existe dernier () uniquement pour   la commodité et la lisibilité.

Et le modèle de rel="noreferrer"> :

  

get_latest_by

     

Options.get_latest_by

     

Le nom d'un DateField ou DateTimeField dans le modèle. Indique le champ par défaut à utiliser dans le dernier méthode de votre modèle Manager.

     

Exemple:

     

get_latest_by = "order_date"

     

Voir la documentation pour le dernier () pour plus.

Edit:. Wade a une bonne réponse de l'opérateur Q ()

Autres conseils

cela fonctionne!

Model.objects.latest('field') - champ peut être id. ce sera le dernier id

Pour la plus grande clé primaire, essayez ceci:

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

Notez que l'utilisation pk fonctionne quel que soit le nom réel du champ défini comme clé primaire.

Depuis Django 1.6 - dernière

last()

fonctionne comme first(), mais retourne le dernier objet dans le queryset.

Retourne le dernier objet abondés par l'queryset ou None s'il n'y a pas d'objet correspondant. Si le QuerySet n'a pas de commande défini, le queryset est automatiquement commandé par la clé primaire.

list = List.objects.last() vous donne le dernier objet créé

alternative pour le dernier objet créé:

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

Il est nécessaire d'ajouter un AssertionError pour le cas où il n'y a aucun élément dans la liste.

except AssertionError:
   ...

Je travaille sur la version Django est 1.4.22, ni last, ni lastet travaille. Ma façon de résoudre avec une charge minimale db est comme:

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

Cette fonction accepte query_set comme entrée.

Vous pouvez lier cette fonction dynamique en faisant:

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

Ensuite, vous devriez être en mesure d'obtenir le dernier objet par ce dernier pk facilement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top