2010-05-21 64 views
0

我有2個表,simpleDB_all和simpleDB_some。 「全部」表格對於我想要的每個項目都有一個條目,而「某些」表格僅對某些需要附加信息的項目具有條目。 Django的模型它們是:Left與Django中的OneToOne字段聯接

class all(models.Model): 
    name = models.CharField(max_length=40) 
    important_info = models.CharField(max_length=40) 

class some(models.Model): 
    all_key = models.OneToOneField(all) 
    extra_info = models.CharField(max_length=40) 

我想創建一個視圖,顯示與額外的信息中的「所有」每一個項目如果在「一些」的存在。由於我使用的是1-1場,我可以幾乎圓滿成功做到這一點:

allitems = all.objects.all() 
for item in allitems: 
    print item.name, item.important_info, item.some.extra_info 

,但是當我到達的項目不具有的「一些」表一所列的相應條目得到一個DoesNotExist異常。

理想情況下,我會在模板中做這個循環,所以不可能將它包裝在「try」子句中。有什麼想法嗎?

我可以直接使用SQL查詢像這樣得到想要的效果:

SELECT all.name, all.important_info, some.extra_info 
    FROM all LEFT JOIN some ON all.id = some.all_key_id; 

但我寧可不使用原始的SQL。

回答

2

您將不會在模板中看到DoesNotExist異常 - 它們在設計上被模板系統隱藏。

你給這些SQL生成的東西,或多或少,當您在查詢中使用select_related(如果你使用Django 1.2或結賬比r12307更近,從2月):

allitems = all.objects.select_related('some') 
+0

這可能工作。感謝您的建議......當我再次到達應用程序的這一部分,並默默地驗證表單「做正確的事情」時,我會回來並將其標記爲已回答。謝謝。 – jamida 2010-05-31 17:49:54