ジャンゴの外部結合モデル化
-
06-07-2019 - |
質問
ジョイントベースにいくつかのデータがある多対多のリレーションテーブルがあります
私のモデルの基本バージョンは次のようになります:
class FooLine(models.Model):
name = models.CharField(max_length=255)
class FooCol(models.Model):
name = models.CharField(max_length=255)
class FooVal(models.Model):
value = models.CharField(max_length=255)
line = models.ForeignKey(FooLine)
col = models.ForeignKey(FooCol)
値が存在しない場合、特定の行のすべての値をヌルで検索しようとしています(基本的に、値が入力されていないヌル値でfoovalテーブルを表示しようとしています) 典型的なSQLは次のようになります
SELECT value FROM FooCol LEFT OUTER JOIN
(FooVal JOIN FooLine
ON FooVal.line_id == FooLine.id AND FooLine.name = "FIXME")
ON FooCol.id = col_id;
djangoモデルを使用して上記のクエリをモデル化する方法はありますか
ありがとう
解決
SQLには「ナビゲーション」がないため、外部結合はハックと見なすことができます。
あなたが持っているのは、単純なif文の状況です。
for line in someRangeOfLines:
for col in someRangeOfCols:
try:
cell= FooVal.objects().get( col = col, line = line )
except FooVal.DoesNotExist:
cell= None
それが外部結合とは実際に何なのかです-NULL置換を使用したルックアップ試行です。
唯一の最適化は次のようなものです。
matrix = {}
for f in FooVal.objects().all():
matrix[(f.line,f.col)] = f
for line in someRangeOfLines:
for col in someRangeOfCols:
cell= matrix.get((line,col),None)
所属していません StackOverflow