2010-01-14 15 views
13

Quiero ordenar un QuerySet de contactos por un campo relacionado. Pero no sé como. Lo intenté así, pero no funciona.django ordene por campo relacionado

foundContacts.order_by("classification.kam") 

En realidad, en una plantilla que tiene acceso al valor kam de un contacto a través de contact.classification.kam ya que es una relación OneToOne.

Los modelos (simplificado) tener este aspecto:

class Classification(models.Model): 
    kam = models.ForeignKey(User) 
    contact = models.OneToOneField(Contact) 

class Contact(models.Model): 
    title = models.ForeignKey(Title, blank=True, null=True) 
    first_name = models.CharField(max_length=200) 
    last_name = models.CharField(max_length=200) 

Respuesta

22

Debería ser:

foundContacts.order_by("classification__kam") 

Aquí hay un enlace a la documentación de Django en hacer preguntas que abarcan las relaciones: http://docs.djangoproject.com/en/1.1/topics/db/queries/#lookups-that-span-relationships

También puede ver algunos ejemplos en la referencia order_by:
https://docs.djangoproject.com/en/1.6/ref/models/querysets/#django.db.models.query.QuerySet.order_by

+3

La sintaxis es correcta, pero esto no tiene nada que ver con la plantilla vista vs. No puede hacer este tipo de ordenamiento en la plantilla (porque la sintaxis de la plantilla no le permite llamar a funciones con argumentos). Pero la sintaxis de doble guión bajo se usa para todas las referencias cruzadas * dentro de * una llamada de función - filtro, anotación, orden_by, etc. Mientras que la sintaxis de punto normal es para cuando tiene un objeto y quiere referirse al objeto relacionado. –

+0

La redacción era pobre y la he eliminado. –

+0

Ok, funciona ahora. ¡Gracias! –

Cuestiones relacionadas