Pregunta

Las disculpas, soy completamente nuevo en Django y Python.

Tengo 2 preguntas. En primer lugar, ¿cómo iba a ir sobre cómo obtener el último objeto creado (o más alto pk) en una lista de objetos? Por ejemplo, sé que podría utilizar el siguiente para conseguir el primer objeto:

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

¿Hay una manera de conseguir la longitud de List.objects? He intentado List.objects.length pero fue en vano.

En segundo lugar, ¿es posible crear filtros simultáneos o combinar las listas? He aquí un ejemplo:

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

Quiero algo como el anterior, pero más como:

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

¿Cuál es la sintaxis correcta, si las hay?

¿Fue útil?

Solución

No he probado esto todavía, pero me gustaría ver el última () operador en QuerySets :

  

última (nombre_campo = None)

     

Devuelve el último objeto en el   mesa, por fecha, mediante el nombre_campo   siempre que el campo de fecha.

     

Este ejemplo devuelve la última entrada   en la tabla, de acuerdo con la   campo pub_date:

     

Entry.objects.latest ( 'pub_date')

     

Si especifica Meta de su modelo   get_latest_by, puede dejar fuera de la   argumento nombre_campo a la última ().   Django usará el campo especificado en   get_latest_by por defecto.

     

Al igual que get (), el último () lanza   DoesNotExist si un objeto no lo hace   existir con los parámetros dados.

     

Nota última () existe únicamente para   conveniencia y facilidad de lectura.

en get_latest_by :

  

get_latest_by

     

Options.get_latest_by

     

El nombre de un DateField o DateTimeField en el modelo. Esto especifica el campo por defecto a utilizar en el último método de su modelo de Manager.

     

Ejemplo:

     

get_latest_by = "order_date"

     

Consulte la documentación para el último () para más.

Editar:. Wade tiene una buena respuesta en Q () operador

Otros consejos

esto funciona!

Model.objects.latest('field') - Identificación del campo puede ser. que será la última id

Para obtener la clave principal más grande, intente lo siguiente:

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

Tenga en cuenta que el uso de pk funciona independientemente del nombre real del campo definido como la clave principal.

Desde Django 1.6 - la última

last()

funciona como first(), pero devuelve el último objeto de la queryset.

Devuelve el último objeto igualados por el conjunto de consultas, o None si no hay ningún objeto coincidente. Si el QuerySet ha definido ningún orden, entonces el conjunto de consultas se ordena automáticamente por la clave principal.

list = List.objects.last() le da el último objeto creado

Puede utilizar el método de conteo () en una consulta de establecer el obtener el número de elementos.

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

Argumentos para filtrar son "Y" ed juntos. Si necesita hacer o filtros mira objetos Q. http: //docs.djangoproject .com / es / dev / temas / db / consultas / # complejas operaciones de búsqueda-con-objetos-Q-

alternativa para el último objeto creado:

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

Es necesario añadir un AssertionError para el caso en que no hay elementos de la lista.

except AssertionError:
   ...

Estoy trabajando en la versión 1.4.22 de Django es, ni tampoco last lastet está trabajando. Mi manera de resolver con la carga mínima db es como:

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

Esta función acepta query_set como entrada.

Es posible que esta función se unen dinámicamente haciendo:

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

A continuación, usted debe ser capaz de obtener el último objeto por este último pk fácilmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top