我有像這樣的Django 1.7左外連接
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',)
我要搜索所有日期範圍之間的工作,並顯示用戶是否可以申請一個模型,已申報或已被拒絕。應用程序信息在應用程序模型中。
jobs = Job.searches.filter(**kwargs)\
.filter(date__range=(date_from, date_to),
visibility=VisibilityStatus.PUBLIC,
status=JobStatus.AVAILABLE)\
.prefetch_related('applied_set')\
.select_related('user__surgeryprofile__location')\
.order_by('date')
但我無法得到它的工作,它不在數據庫中對應用表進行左連接。任何建議如何讓它工作。
感謝
請原諒我問,但內部連接不會足夠嗎? – e4c5
內部聯接只會帶來兩個表中存在的行,我想要一個左側聯接,因爲我希望日期範圍和應用表中的行之間的作業表中的所有行如果用戶已經申請了該作業並且它已經下降。 –
即使沒有連接,您的代碼應該會給您正確的結果(已過濾的作業可能爲空的applied_set)。 「在大多數情況下,prefetch_related將使用使用'IN'運算符的SQL查詢來實現。」 https://docs.djangoproject.com/en/1.7/ref/models/querysets/#prefetch-related – JimmyYe