2012-01-13 58 views
1

說我有這些模型: 獲取外鍵值而不獲取整個對象?

 
class Parent(models.Model): 
    slug = models.SlugField()
class Child(models.Model): slug = models.SlugField() parent = models.ForeignKey('Parent')

我想創建一個dict

 
{x.parent.pk : x.slug for x in Child.objects.all()} 
這個代碼生成每個迭代一個單獨的數據庫查詢。只是爲了獲得 Parent對象,只是爲了得到它的主鍵。這就是在 Child對象那裏開始!我不需要父母的任何東西,只需要它的主鍵。我如何獲得底層外鍵的價值?

(是的,我知道我可以使用select_related()擺脫這些額外的查詢,但我的問題是不是這個。)

的感謝!

回答

4

這應該工作

{x.parent_id : x.slug for x in Child.objects.all()} 
1

嘗試:

{x.parent.pk : x.slug for x in Child.objects.select_related('parent')} 

編輯

對不起。誤解了你想要的東西。你應該能夠只是做:

{x.parent_id : x.slug for x in Child.objects.all()} 
+0

我試過了,它的工作原理:),正如我在我的問題中指出的那樣,我有興趣瞭解是否有一種方法可以在不加入Parent表的情況下從Child表中獲取密鑰。 – akonsu 2012-01-13 20:14:49

+0

@akonsu:查看編輯 – 2012-01-13 20:20:02

2

有這個一個很好的快捷方式,這只是取父ID和蛞蝓等是更有效的:

dict(Child.objects.values_list('parent_id', 'slug')) 
+0

很酷的使用values_list和dict!不知何故,我不認爲我曾經使用values_list作爲即時鍵值映射。 – 2012-01-13 23:07:47