Compte tenu des modèles suivants, je dois retourner une liste de Liens pour chaque Lieu, regroupés par catégorie ., groupe plusieurs instances d'un objet basé sur le champ ManyToMany dans Django
class Place(models.Model):
name = models.CharField(max_length=100)
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Link(models.Model):
name = models.CharField(max_length=100)
url = models.URLField()
place = models.ManyToManyField('Place')
categories = models.ManyToManyField('Category')
description = models.TextField()
featured = models.BooleanField()
published = models.BooleanField()
date_added = models.DateField(auto_now_add=True)
Le résultat ressemblerait à quelque chose comme:
Some Place
Informations sur Some Place ... (pas vraiment importante à la question)
Banques
Bank of America
Commerce Bank
Première nation B ank
Services financiers
Bank of America
Edward Jones
prêts
Commerce Bank
First National Bank
Comme vous pouvez le voir, un lien doivent être énumérés dans chaque Catégorie auquel il appartient.
J'ai essayé de faire défiler les catégories et de concaténer les jeux de requête, mais avec les champs ManyToMany, il ne semble pas possible de faire le tri nécessaire qui peut être passé dans le template et groupé là.
Si vous faites juste place.link_set.all() comme ça, les liens qui sont supposés apparaître dans plusieurs catégories n'apparaissent que dans le jeu de requête. une fois au lieu d'une fois pour chaque catégorie dans laquelle ils sont répertoriés. Sans compter qu'il n'y a aucun moyen de trier les liens par nom de catégorie. Je pense que la façon de faire est d'utiliser un champ intermédiaire pour les relations ManyToMany. De cette façon, les instances de chaque liste dans chaque catégorie peuvent être récupérées et triées. –