Я хочу смоделировать торт с несколькими обледенением . Каждая глазурь имеет вкус. Обледенение может принадлежать нескольким пирогам, поэтому это должно быть отношение многих ко многим.
Я выполнил требование для этой модели:
class Cake(models.Model):
layers = models.ManyToManyField(Icing, through='CakeLayer')
class Icing(models.Model):
flavour = models.CharField(max_length=200)
class CakeLayer(models.Model):
cake = models.ForeignKey(Cake, on_delete=models.CASCADE)
icing = models.ForeignKey(Icing, on_delete=models.CASCADE)
order = models.IntegerField()
Однако Я хочу запросить торт с шоколадной глазурью поверх ванильной глазури (например, chocolate_icing.order > vanila_icing.order
)
Я не могу добиться этого с помощью Django ORM, но он довольно прост с помощью SQL.
SELECT * FROM "cake"
INNER JOIN "cakelayer" i1
ON ("cake"."id" = "cakelayer"."cake_id")
INNER JOIN "cakelayer" i2
ON ("cake"."id" = "cakelayer"."cake_id")
WHERE (i1.order > i2.order
AND i1.icing.flavor="chocolate"
AND i2.icing.flavor="vanila"
)
Я бы лучше написал python код, чем внедрил SQL. Любая идея, как преобразовать этот SQL в Django ORM синтаксис?