我使用的是以下型号:
<div class="colors">
<div class="clip" id="color1">
<div class="section" id="color1Actual"></div>
</div>
<div class="clip" id="color2">
<div class="section" id="color2Actual"></div>
</div>
<div class="clip" id="color3">
<div class="section" id="color3Actual"></div>
</div>
</div>
现在我只想要素食菜单的元素,用西红柿过滤
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
这最后一个查询在mysql db中运行正常。并使用pizza.objects.raw工作,但我想使用django ORM
使用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
进行选择时,我会使用topping.name
进行尝试。但我不能得到相同的选择。
答案 0 :(得分:0)
您是否尝试过使用values方法进行Queryset?
类似的东西:
pizza_item = Pizza.objects.filter(toppings__name='tomatoes').values("id", "name", "toppings__name")
答案 1 :(得分:0)
我不确定这是否可行。因为当您使用 Pizza.objects ... 时,您只能使用Pizza模型中的字段。由于Pizza模型不包含浇头的名称字段。你无法检索它。您只能检索配料的ID字段:
pizza_item = Pizza.objects.filter(toppings__name='tomatoes').values('id', 'name', 'toppings')
这将在SELECT中提供“toppings”。“topping_id”。
此外,由于您已指定 toppings__name ='tomatoes ,因此所有浇头的名称都是此查询集中的西红柿,因此 topping
的重点是什么。您的结果中有name
?