2017-03-15 4 views
0

DjangoのORMには、関連するテーブルを結合するためのselect_related()というメソッドがあります。すべての列を含めずにDjangoに関連する列を含める方法

ただし、含まれているフィールドが別のモデルの外部キーである場合、デフォルトの動作では、関連するモデルのすべての列が含まれているようです。例えば

、私はモデルがある場合:

class A(models.Model): 
    field1 = models.CharField(...) 
    field2 = models.CharField(...) 

class B(models.Model): 
    field1 = models.CharField(...) 
    field2 = models.ForeignKey(A) 

print str(B.objects.all().select_related('field2').query)) 

出力:

SELECT myapp_b.id, myapp_b.field1, myapp_b.field2_id, myapp_a.id, myapp_a.field1, myapp_a.field2 FROM ... 

が、私は唯一のAからではないすべてのフィールドA.field1を含むようにしたいので、私がやってみました:

print str(B.objects.all().select_related('b__field1').query)) 

しかし、これは全く同じクエリを出力します。

select_related()に記載されている外部キーフィールドのすべてのフィールドをDjangoに含めないようにするにはどうすればよいですか?

答えて

2

あなたはonly()を使用することができますが、その後、あなたはあなたのBオブジェクトからすべてのフィールドが含まする必要があります。

B.objects.all().select_related('field2').only('field1', 'field2__field1') 
+0

私は似たものをしようとしたが、私は完全なフィールド名を使用していたため、エラーを得ていたがそれぞれにトリックは、フィールド名の両方のセットが重複しないようにすることです。 – Cerin

関連する問題