Kohana からこのコードを持っています (簡単に理解できます)。ff を指定して、これを Django ORM に変換したいと考えています。モデル:
class Item(models.Model):
glasses = models.ManyToManyField(Glass, through="ItemGlass")
collection = models.ForeignKey(Collection)
class ItemGlass(models.Model):
glass = models.ForeignKey(Glass)
item = models.ForeignKey(Item)
class Collection(models.Model):
name = models.CharField(max_length=100)
class Code(models.Model):
code = models.CharField(max_length=30)
description = models.TextField()
class Glass(models.Model):
collection = models.ForeignKey(Collection)
code = models.ForeignKey(Code)
および php クエリ (Kohana の Database Lib を使用)
$this->select(
array('cd.id', 'id'),
array('cd.description','description'),
array('COUNT(DISTINCT("items.id"))', 'count')
)
->from('items')
->join(array('collections', 'c'))
->on('c.id', '=', 'items.collection_id')
->join(array('glasses', 'g'))
->on('g.collection_id', '=', 'c.id')
->join(array('code', 'cd'))
->on('cd.id', '=', 'g.code_id')
->where('items.discontinued', '=', FALSE)
->group_by('cd.id');
注:表示される「配列」句は次のように翻訳されます
"SELECT cd.id AS id, cd.description AS description, COUNT(DISTINCT(items.id) AS count"
事は私がそれを行う方法ですか?この場合、select_related を使用して複数のテーブルを結合することができず、クエリの適切な "フィルター トリック" を見つけることができません。何か案は?
編集:プレーンSQLで実行することを検討していますが、Django ORMクエリを実行できる場合は避けたいと思います:)