2011-02-16 7 views
1

je le modèle suivant:quel queryset est requis?

PHONE_CHOICES = (
    ('home', 'Home'), 
    ('home2', 'Home 2'), 
    ('mobi', 'Mobile'), 
    ('mobi2', 'Mobile 2'), 
    ('work', 'Work'), 
    ('work2', 'Work 2'), 
) 

class ClientPhone(models.Model): 
    client = models.ForeignKey(Client, editable=False) 
    created = models.DateTimeField(default=datetime.now, editable=False) 
    created_by = models.ForeignKey(User,editable=False) 
    phone_type = models.CharField(max_length=5, choices=PHONE_CHOICES) 
    number = models.CharField(max_length=24) 

Je sais ClientPhone.objects.filter(client=i_clientKEY).latest('created') me obtenir le dernier numéro de téléphone est entré dans le db, mais je veux être en mesure d'obtenir les derniers numéros de téléphone pour « home », « home2 » , 'mobi', etc ... (tous) pour un client.

Comment puis-je obtenir un jeu de requête pour cela?

Répondre

1

dernier() renvoie une seule requête objet, pas une liste, de sorte que vous obtiendrez le dernier tél. enregistrement de la personne liée.

Si vous souhaitez obtenir la dernière nmber pour chaque PHONE_TYPE, vous devez exécuter des requêtes diffrent SQL, ce qui signifie que vous devez écrire des requêtes diffrent pour chaque PHONE_TYPE ...

@Aldarund: en utilisant phone_type__in vous aide pour obtenir le dernier enregistrement avec phone_type de l'un des éléments de la liste (un avec la dernière heure de création), mais pas un résultat pour chaque élément de la liste

+0

Je pensais que pourrait être la réponse – Sevenearths

0

Il suffit d'ajouter un autre argument pour filtrer comme ceci:. ClientPhone.objects.filter (client = i_clientKEY, PHONE_TYPE = 'home') dernier ('créé')

+0

puis-je faire comme 'ClientPhone.objects.filter (client = i_clientKEY, phone_type = 'home', phone_type = 'home2', phone_type = 'mobi', phone_type = ...). latest ('created') 'pour tous? – Sevenearths

+1

Vous pouvez le faire comme ceci: ClientPhone.objects.filter (client = i_clientKEY, type_type__in = ['home', 'home2', 'mobi', ...]). Latest ('created') – Aldarund

Questions connexes