我知道它已被回答了几次,仍然来自文档和示例我无法弄清楚我的代码有什么问题: 的 MODEL:
class BaseAbstractModel(models.Model):
class Meta:
abstract = True
version = models.BigIntegerField(default = -1)
update_time = models.DateTimeField(auto_now=True)
create_time = models.DateTimeField(auto_now_add=True)
def save(self, *a, **kw):
save_lock = LockFactory.get_lock((type(self), self.id,))
with save_lock:
self.version += 1
super(BaseAbstractModel, self).save(*a, **kw)
objects = BaseAbstractModelManager()
class SessionData(BaseAbstractModel):
token = models.SlugField(max_length=20)
class SessionDataTransactions(BaseAbstractModel):
session = models.ForeignKey(SessionData, related_name='transactions')
submitted = models.DateTimeField(null=True)
我试图执行左连接以执行以下操作:
select main_sessiondata.id,
main_sessiondata.token,
main_sessiondatatransactions.submitted
FROM main_sessiondata
LEFT JOIN main_sessiondatatransactions ON
main_sessiondata.id=main_sessiondatatransactions.session_id;
尝试了'过滤','select_related','prefetch_related',一切正常。
是否可以从LEFT(sessionData)获取所有值,无论是否在RIGHT(sessionDataTransactions)上找到匹配的项目?
有什么想法吗?
答案 0 :(得分:0)
Django不会对反向关系进行连接,因此您描述的行为实际上是默认行为。 SessionData.objects.all().prefetch_related('transactions')
在两个查询中会得到相同的结果。