2015-01-13 31 views
1

我是Django的新手,想要編寫符合其思想的代碼。我期待看看這是否曾被問及,但我找不到與我的用例相匹配的任何內容。我懷疑我只是不知道正確的術語。Django:從多個關聯模型加入數據的最佳方法

情況很簡單,涉及到Django的ORM。我有兩個型號,例如:

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

class Meta(models.Model): 
a = models.OneToOneField(A) 
n_views = models.IntegerField() 
created = models.DateField() 

A存儲一些核心數據。 Meta是元數據,對應於A中的每個條目。問題是,當我需要訪問A條目和相關的元數據條目時,問題就來了。例如,我可能想要打印彙總表:

________________________ 
A      | 
name | created | n_views| 
josh | 1/1/2000| 1  | 
john | 2/2/2000| 4  | 
________________________ 

我現在做的是這樣的:

as = A.objects.all() 
meta = [Meta.objects.filter(a__pk=a.pk) for a in as] 

現在我所有的數據,我需要,我可以把它放在一起,用手,在列表中:

data = [] 
for a,m in zip(as, meta): 
data.append({'name': a.meta, 'created': m.created, 'n_views': m.n_views}) 

此列表的字典現在可以轉發到我的模板。

這有效,但對我來說似乎有點笨拙;如果Django沒有更好的處理方法,我會感到驚訝。任何人都可以指出我更簡潔的做法嗎?

謝謝!

回答

2

你可以這樣做:

objs = A.objects.select_related().all() 
for a in objs: 
    print(a.name, a.meta.n_views, a.meta.created) 

,這將讓Django的建立,無論對於A對象和Meta對象的查詢的查詢。

+0

這看起來像一個很好的解決方案,但我無法阻止自己指出你不應該使用as,因爲它是一個Python保留字。 https://docs.python.org/2.5/ref/keywords.html –

+0

對不起,這個'as'只是我沒有多少想到的一些示例代碼。好點子。 –

+0

這正是我想要的!謝謝,西蒙。 –

相關問題