Je construis une base de données de journalisation des aliments dans Django et j'ai un problème lié à la requête.Comment trier par annotated Count() dans un modèle associé dans Django
J'ai configuré mes modèles pour inclure (entre autres) un modèle Food connecté au modèle User via un «consommateur» de champ M2M via le modèle Consommation. Le modèle Food décrit les plats d'aliments et le modèle de consommation décrit la consommation d'aliments par un utilisateur (date, quantité, etc.).
class Food(models.Model):
food_name = models.CharField(max_length=30)
consumer = models.ManyToManyField("User", through=Consumption)
class Consumption(models.Model):
food = models.ForeignKey("Food")
user = models.ForeignKey("User")
Je veux créer une requête qui retourne tous les objets alimentaires commandés par le nombre de fois que l'objet alimentaire apparaît dans la table de consommation pour cet utilisateur (le nombre de fois que l'utilisateur a consommé la nourriture).
J'essaie quelque chose dans la ligne de:
Food.objects.all().annotate(consumption_times = Count(consumer)).order_by('consumption_times')`
Mais ce sera bien sûr compter tous les objets de consommation liés à l'objet alimentaire, pas seulement ceux associés à l'utilisateur. Ai-je besoin de changer de modèle ou est-ce que je manque quelque chose d'évident dans les requêtes?
Il s'agit d'une opération assez complexe (entre autres, elle est utilisée pour remplir un champ de saisie semi-automatique dans le Frontend) et la table Food a quelques milliers d'entrées, donc je préfère trier dans la base de données fin de compte, plutôt que de faire la méthode de la force brute et itérer sur les résultats faisant:
Consumption.objects.filter(food=food, user=user).count()
puis trier en utilisant python pour les trier. Je ne pense pas que cette méthode évolue très bien au fur et à mesure que la base d'utilisateurs augmente et je veux concevoir la base de données comme une preuve d'avenir dès que possible.
Des idées?
double possible de [Ordre par comptage d'un champ ForeignKey?] (Http://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field) –