J'ai deux modèles: Job & Lieu:Django select_related() pour la requête multi-jointure à l'aide du modèle et les filtres
class Job(models.Model):
title = models.CharField(max_length=20)
company = models.CharField(max_length=20)
location = ForeignKey('Location')
class Location(models.Model):
country = models.CharField(max_length=20)
state = models.CharField(max_length=20)
city = models.CharField(max_length=20)
latitude = models.FloatField(blank=True, default=0.0)
longitude = models.FloatField(blank=True, default=0.0)
big-city = ForeignKey('Location')
Disons que: Je US/Californie/San-Fran, Etats-Unis/Californie/San_Jose, États-Unis/Californie/Alameda & US/Calif/Oakland dans ma base de données. J'ai aussi Manager/Ebay/San-Fran, Comptable/Amazon/San-Jose, Coop/IBM/Oakland & Directeur/Dell/Alameda.
En outre: San-Fran a lui-même comme big_city, tandis que San-Jose, Alameda & Oakland ont San-Fran comme leur grande ville.
Maintenant, je fais une requête comme celle-ci quand quelqu'un est à la recherche de tous les emplois à San-Fran.
Job.objects.filter(
location__country='US',
location__state='Calif',
location__city='San-Fran').selected_related('Location')
Cependant, je voudrais permettre la recherche par région où l'utilisateur peut rechercher tous les emplois à San-Fran Région. Ce serait tous les emplois à San-Fran, Oakland, Alameda & San-Jose? Comme "Montrez-moi tous les travaux qui ont leur emplacement est la référence par d'autres emplacements".
Cela s'appellerait-il une double jointure?
Idéalement, j'utiliserais lat-lon-radius (exercice plus tard), mais pour l'instant je veux savoir comment le faire avec une double jointure.
Thx.
Vn44ca
Ne doit pas être: Job.objects.filter(). Selected_related ('Location') ou était-ce supposé? Si oui, devons-nous en mettre deux: .selected_related ('Location'). Selected_related ('Location') pour indiquer une double jointure? Si oui, que se passe-t-il si la classe A a B comme FK et la classe B a C comme FK et que vous voulez effectuer une jointure double, alors serait-ce: A.objects.filter(). Selected_related ('B'). Selected_related ('C') Merci Ayman – un33k
select_related() est recommandé si vous prévoyez d'accéder aux champs ForeignKey dans le QuerySet résultant. Un seul appel sans args est nécessaire; select_query() suit autant que possible les clés étrangères. Donc, si vous voulez accéder au champ d'emplacement dans le résultat, utilisez select_related(). –