===的模型 ===
class A(models.Model):
name= models.CharField(max_length=20, blank=False)
Class B(models.Model):
university = models.CharField(max_length=25, blank=False)
location = models.CharField(max_length=30, blank=False)
b_fk= models.ForeignKey(A)
Class C(models.Model):
studentclass = models.CharField(max_length=10, blank=False)
section = models.CharField(max_length= 10)
c_fk = models.ForeignKey(B)
class Cfurther(models.Model):
branch= Models.CharField(max_length=15, blank=Flase)
number = models.IntegerField()
cfur_fk = models.ForeignKey(C)
class Info(models.Model):
info_number = models.IntegerField()
info = models.CharField(max_length= 12, blank=Flase)
info_fk = models.ForeignKey(B, related_name= "info_set")
class Infocategory(models.Model):
find = models.CharField(max_length=15, blank=False)
cat_fk = models.ForeignKey(Info)
class Extra(models.Model):
extrainfo = models.CharField(max_length=30)
extra_fk = models.ForeignKey(Infocategory)
=== 查看 ===
Django文档
返回一个自动“跟随”外键的QuerySet 关系,选择其他相关对象数据时 执行其查询。
select_related仅限于单值关系 - 外键 和一对一。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
我编写了以下Queryset来获取模型字段(所有关系都是一对多)
myquery = Info.objects.select_related().filter(info_number__iexact = 123)
对于 select_related 字段查找
,我有点困惑答案 0 :(得分:4)
您可以通过标准的Django API遍历所有关系。 select_related
在建立关系方面没有做任何特别的事情;它只允许您通过提前执行连接来减少数据库查询的数量(而不是在访问时查找每个外键)。
但是,正如文档所述,select_related
仅适用于外键和OneToOneFields。它根本不适用于ManyToManyFields。此外,如果它是OneToOneField,您只能跟select_related
的反向关系。不支持反向ForeignKeys。最后,默认情况下select_related
仅跟随null=False
字段。如果它是一个可以使用NULL的字段,则必须明确告诉select_related
遵循它:
SomeModel.objects.select_related('some_nullable_field')
一旦Django 1.4命中,您将可以访问名为prefetch_related
的新方法,其工作方式类似于select_related
,但支持ManyToManyFields并反转ForeignKey关系。