Dados estos modelos (donde un Restaurante tiene muchas Pizzas y las Pizzas tienen muchos Toppings )
class Restraunt(Model) class Topping(Model): name = Charfield() class Pizza(Model): in_resteraunt = ForeignKey(Resteraunt) toppings = ManyToMany(topping, related_name='on_pizza')Estoy tratando de averiguar cómo: dado un restaurante, en todas sus pizzas, ¿cuál es el aderezo más común?
Una cosa que se me ocurrió es algo como esto (donde R = el restaurante)
Topping.objects.filter(on_pizza__restaurant=R).annotate(the_count=Count('on_pizza')).order_by('-the_count')[0]El problema aquí es que no estoy seguro de si on_pizza es exclusivo del objeto Restaurant, básicamente, un objeto topping puede estar en una pizza en varios restaurantes. Necesito que sea único. Aquí estoy comenzando con el Topping, ¿hay alguna manera de comenzar con un conjunto de búsqueda de pizzas?
He buscado expresiones de subconsulta pero realmente no veo cómo implementar
El problema aquí es que no estoy seguro de si
on_pizzaes exclusivo del objetoRestaurant, básicamente, un objeto topping puede estar en una pizza en varios restaurantes. Necesito que sea único.
La consulta es correcta . Usted filtra en el restaurante, lo que significa que en el Count , solo contará las Pizza que son para el restaurante R Entonces, esto calculará el aderezo más común para las pizzas hechas en el restaurante R
La consulta se verá así:
SELECT topping.*, COUNT(pizza.pk) FROM topping LEFT OUTER JOIN pizza_toppings ON pizza_toppings.topping_id = topping.id LEFT OUTER JOIN pizza ON pizza.id = pizza_toppings.pizza_id WHERE pizza.restaurant_id = id_of_r GROUP BY topping.pk ORDER BY COUNT(pizza.pk) LIMIT 1