Ich habe ein Modell wie sodjango 1.7 linke äußere Verknüpfung
class Job(models.Model):
description = models.CharField(max_length=255)
user = models.ForeignKey(User)
date = models.DateField()
slot = models.CharField(max_length=10, choices=SLOT_CHOICES)
location = models.ForeignKey(Location)
objects = JobManager()
searches = geomodels.GeoManager()
class Meta:
verbose_name_plural = "Job"
unique_together = ('date', 'slot', 'user')
def __str__(self):
return "{0}-{1}".format(self.user.first_name, self.date)
class Applied(models.Model):
user = models.ForeignKey(User)
job = models.ForeignKey(Job, null=True, blank=True)
action_taken = models.BooleanField(default=False)
is_declined = models.BooleanField(default=False)
class Meta:
verbose_name_plural = "Job Applications"
unique_together = ('user', 'job',)
Ich möchte für alle Arbeitsplätze zwischen einem Datumsbereich suchen und zeigen, ob ein Benutzer anwenden können, bereits angewendet oder abgelehnt wurde. Die Anwendungsinformationen sind im angewandten Modell.
Aber ich kann es nicht funktionieren, es ist nicht eine linke Join auf der angewandten Tabelle in der Datenbank. irgendwelche Vorschläge, wie es funktioniert.
Dank
Vergib mir zu fragen, aber Wäre eine innere Verbindung nicht ausreichend? – e4c5
Innerer Join bringt nur die Zeilen, die in beiden Tabellen vorhanden sind, ich möchte einen ausgelassenen Join, wie ich alle Zeilen aus der Jobtabelle zwischen dem Datumsbereich und Zeilen aus der angewendeten Tabelle möchte, wenn der Benutzer bereits für diesen Job beantragt hat und wenn es gewesen ist abgelehnt. –
Ihr Code sollte Ihnen das richtige Ergebnis geben (gefilterte Jobs mit einem applied_set, das möglicherweise leer ist), obwohl keine Joins vorhanden sind. "prefetch_related wird in den meisten Fällen mit einer SQL-Abfrage implementiert, die den 'IN'-Operator verwendet." https://docs.djangoproject.com/en/1.7/ref/models/querysets/#prefetch-related – JimmyYe