Django测试没有命中数据库的NULL字段

时间:2013-04-26 23:27:52

标签: django django-orm

我有以下架构:

class A(models.Model):
    name = models.CharField(max_length=100)

class B(models.Model):
    name = models.CharField(max_length=100)
    a = models.ForeignKey(A, blank=True, null=True)

将所有B对象拾取到模板

b = B.objects.all()

在我想去的模板中

for n in b:
    n.name
    if n.a:
        do_something()

但由于外键,这是在击中数据库,我只想知道a是否为空。而且我不想通过加入来获取所有A内容。

1 个答案:

答案 0 :(得分:4)

当您创建与另一个模型的关系时,幕后django实际上使用一个名为a_id的字段在id本地存储A模型的B } model(它还在幕后创建id)。然后,当您访问b.a时,它根据A表中的实际数据库条目知道要选择哪个B

所以:

b.a跟随关系并点击数据库以获取A模型

b.a_id使用包含与b模型相关的id的本地A模型字段

如果这没有意义,请告诉我......