Je rencontre un problème avec une requête DB dans Django.
Ma base de données (models.py) :
class Food(models.Model):
name = models.CharField(max_length=200)
...
class Combination(models.Model):
food1 = models.ForeignKey(Food, related_name='food1')
food2 = models.ForeignKey(Food, related_name='food2')
...
L'ordre de combinaison des aliments n'a pas d'importance pour mon problème.
En outre, chaque combinaison peut exister plusieurs fois (et dans les deux sens).
Par exemple, food1="chocolat" & food2="fruit" est la même chose que food2="chocolat" & food1="fruit".
et les deux combinaisons existent plusieurs fois.
Si je veux trouver toutes les combinaisons comprenant un aliment spécifique (identifié par food_id)
J'ai actuellement recours aux questions suivantes :
combinations1 = Combination.objects.filter(food1=food_id).values_list('food2')
combinations2 = Combination.objects.filter(food2=food_id).values_list('food1')
Cela fonctionne, mais nécessite un traitement ultérieur. J'ai essayé d'utiliser des objets Q avec OR, mais je n'ai pas réussi car la colonne extraite dépend du filtre...
Je sais que cette solution est loin d'être élégante. Devrais-je plutôt utiliser un champ personnalisé ou un champ CommaSeparatedIntegerField au lieu de deux champs alimentaires distincts dans Combination ? Existe-t-il un moyen d'obtenir toutes les valeurs demandées (des deux colonnes) en une seule frappe dans la base de données ?
Merci de m'avoir aidé !
Santé,
Oliver