2013-04-26 70 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