2012-01-13 15 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')} 

EDIT

申し訳ありません。あなたが望むものとまったく間違っていると誤解しました。

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

私はそれを試しました、それは動作します:)私は私の質問で指摘したように、親テーブルに参加せずに子テーブルからキーを取得する方法があるかどうかを調べることに興味があります。 – akonsu

+0

@akonsu:編集 –

2

これだけ親IDとナメクジを取得し、より効率的である。このための素晴らしいショートカット、あります動作するはずです:あなたはただ行うことができるはず

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

を参照values_listとdictのクールな使用!どういうわけか、私は今までvalues_listをインスタント・キー・バリュー・マップとして使用したことはないと思います。 –

関連する問題