我正在使用django 1.9。 我有以下Django模型:
@python_2_unicode_compatible
class Projects(models.Model):
index = models.IntegerField(blank=True,default=1)
year = models.CharField(max_length=255, blank=True)
title = models.CharField(max_length=255, blank=True)
description = models.TextField(blank=True)
def __str__(self):
return '%s, %s, %s, %s' %(self.index,self.year,self.title,
self.description)
@python_2_unicode_compatible
class Awards(models.Model):
title = models.CharField(max_length=255, blank=True)
def __str__(self):
return '%s' %( self.title)
@python_2_unicode_compatible
class Images(models.Model):
projects = models.ForeignKey(Projects,null=True,blank=True, related_name='images_projects')
awards = models.OneToOneField(Awards,null=True,blank=True,related_name='images_awards')
title = models.CharField(max_length=255, blank=True)
file = models.ImageField(upload_to='upload_images/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s, %s' %(self.file, self.pk)
1)我正在尝试获取所有模型对象项目和模型对象与模型项目Projects.objects.all().select_related('images_projects')
相关的图像
结果,我只得到模型对象Projects。
2)我想获得模特奖励的所有对象和图像中的相关字段。
Awards.objects.all().prefetch_related('images_awards')
因此,我只收到奖励模式的所有字段。
如何在我的2个案例中将相关字段与主模型的所有对象一起获取?
答案 0 :(得分:2)
select_related
和prefetch_related
是性能提升器,用于检索当前查找的相关对象。查询返回相应的对象(主要是)进行查找,然后同时获取相关对象;
您仍然需要使用常规语法来访问Python中的相关对象。
e.g。
for p in Projects.objects.all().select_related('images_projects'):
print(p.images_projects)
访问p.images_projects
时不会访问数据库,因为它已经与project
一起提取。