2013-04-26 67 views
0

我有以下模式:Django的测试NULL字段

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

如果你做'如果n.a_id:'怎么办?外键为以'_id'结尾的模型添加一个额外字段,该字段应允许您访问'n'模型上的实际本地字段而不是访问数据库。 – Ngenator 2013-04-26 23:36:22

回答

4

当您创建到另一种模式的关系,幕后Django是实际使用一种称为a_id场在本地存储上B模型A模型的id(它也创造了幕后id)。然后当您访问b.a时,它知道根据B表中的实际数据库条目选择哪个A

所以:

b.a如下的关系和访问数据库来获取A模型

b.a_id使用包含涉及A模型id

让我的地方b模型的场知道这是否没有道理...

+0

是的,你是对的,谢谢:) – balsagoth 2013-04-27 00:20:43