【发布时间】:2015-07-15 04:53:18
【问题描述】:
我正在使用以下模型:
class Topping(models.Model):
name = models.CharField(max_length=30)
class Pizza(models.Model):
name = models.CharField(max_length=50)
toppings = models.ManyToManyField(Topping)
def __str__(self): # __unicode__ on Python 2
return "%s (%s)" % (self.name, ", ".join(topping.name
for topping in self.toppings.all()))
现在我只想要素食菜单的元素,用西红柿过滤
pizza_item = Pizza.objects.filter(toppings__name='tomatoes')
我的选择是:
SELECT `pizza`.`id`, `pizza`.`name`
FROM `pizza`
INNER JOIN `pizza_toppings` ON (
`pizza`.`id` = `pizza_toppings`.`pizza_id` )
INNER JOIN `web_topping` ON (
`pizza_toppings`.`topping_id` = `topping`.`id` )
WHERE `topping`.`name` = azucar
但我想得到:
SELECT `pizza`.`id`, `pizza`.`name`, `topping`.`name`
FROM `pizza`
INNER JOIN `pizza_toppings` ON (
`pizza`.`id` = `pizza_toppings`.`pizza_id` )
INNER JOIN `web_topping` ON (
`pizza_toppings`.`topping_id` = `topping`.`id` )
WHERE `topping`.`name` = azucar
最后一个查询在 mysql db 中运行良好。并且使用 Pizza.objects.raw 但我想使用 django ORM
是topping.name 的选择,我尝试使用prefetch_select('toppings')。但我无法获得相同的选择。
【问题讨论】:
标签: django database django-models many-to-many models