2013-08-11 4 views
0

J'ai deux tables appelées Location et Rate.django - comment faire une requête?

table de taux a ces articles: enter image description here

von_location est foreignkey à la table de localisation.

Je veux obtenir un emplacement pour un taux voulu. si je cherche un endroit avec romantique 2, je reçois l'emplacement avec l'ID 5. c'est bon. mais si je cherche aussi un endroit avec romantique 3, je reçois également l'emplacement avec l'ID 5. mais je veux cette logique:

si un des emplacements ont deux taux, obtenez le dernier. comment puis-je faire ça en django?

mes modèles sont:

class Location(models.Model): 
name = models.TextField() 
adres = models.TextField() 

class Rate(models.Model): 
von_location = models.ForeignKey(Location,related_name='locations_bewertung') 
bewertung = models.IntegerField(max_length=2) 
romantic = models.IntegerField(max_length=2) 
priceleistung = models.IntegerField(max_length=2) 
datum = DateTimeField(auto_add_now=True) 

j'ai laissé tomber certaines colonnes qui ne sont pas pertinentes à ma question

j'ai essayé ceci:

locations = Location.objects.filter(**s_kwargs).order_by('locations_bewertung').distinct('locations_bewertung') 

Je reçois toujours le même endroit pour les requêtes. 2 et 3.

+0

Pourriez-vous montrer les modèles? – alecxe

+0

@alecxe, oui, pls c ma mise à jour – doniyor

+0

cr et von_user_id ne sont pas couvertes par vos modèles, bien qu'ils apparaissent dans la base de données. – Tadeck

Répondre

1

Je suis confus si vous essayez de filtrer sur Location ou Rate. Votre introduction implique que vous voulez filtrer sur Rate (puisque romantic appartient à ce modèle) mais votre exemple de requête filtre sur Location.

Si vous voulez trouver le Location de Rate la plus récente associée à un ensemble de paramètres de requête, essayer quelque chose comme:

location = Rate.objects.filter(romantic=something).latest('datum').von_location 
+0

merci Kevin, je vais le tester – doniyor

1

Si je vous comprends bien, ce que vous voulez est d'ajouter une fonction au modèle d'emplacement, comme ceci:

def get_latest_rate(self): 
    return self.rate_set.latest('datum') 

Ensuite, vous pouvez faire ceci:

[l.get_latest_rate() for l in Location.objects.filter(**s_kwargs)] 
Questions connexes