我正在努力解决这个问题:
我需要获得所有多个对象并且正在考虑使用prefetch_related
这是我模特的样本:
class Company(models.Model):
companyjobs = models.ManyToManyField(CompanyJob, related_name='jobs')
class CompanyJob(models.Model):
source = models.CharField(_('Source'), max_length=64, db_index=True)
这是我试过的:
search_results = Company.objects.prefetch_related('companyjobs')
现在我想访问companyjobs对象。 我该怎么做?
答案 0 :(得分:0)
您可以直接从公司模型类的任何实例访问companyjobs,而无需prefetch_related
。
例如
# .all() will get all elements and [0] will get the first
company = Company.objects.all()[0]
company.companyjobs
# this is actually a ManyToMany Manager
# you deal with it like any other manager so
for companyjob in company.companyjobs.all():
# all() will again get all items in company.companyjobs
# here you iterate over all companyjobs in that company
... # do what you must
现在,我们只有一家公司,并从那里开始所有的公司工作。
我们这样做的方式django将对数据库进行2次查询。
一个用于公司,一个用于工作
prefetch_related
将'合并'那些查询合而为一
所以我们从db中获取公司时获得所有相关的工作
这非常方便,因为如果您不使用prefetch_related
,您需要处理的公司越多,就会获得一个额外的查询来获取该公司的工作,从而大幅降低性能。
此处有更多信息:https://docs.djangoproject.com/en/1.7/ref/models/querysets/#prefetch-related