3 votes

Obtenir toutes les valeurs uniques stockées dans un champ de plusieurs à plusieurs

J'ai un champ de plusieurs à plusieurs appelé categories et j'aimerais obtenir des valeurs distinctes stockées dans ce champ.

Mon modèle est le suivant :

class Book (models.Model):
    categories=models.ManyToManyField(Category, related_name = 'categories', blank = True, null=True)

Voici mon modèle de catégorie :

class Category (MPTTModel):
    category = models.CharField(max_length=250)
    parent = TreeForeignKey('self', blank=True, null=True, related_name='children')

J'aimerais obtenir toutes les catégories liées à un livre. Comment faire ?

6voto

Rohan Points 22386

Si vous souhaitez obtenir des catégories liées à un instance de livre, faire book_inst.category_set.all() . Il n'y aura pas de doublons.

Mais je pense que vous voulez obtenir tous les Categories qui sont liés à tous Book vous pouvez faire :

Category.objects.filter(categories__in=[Book.objects.all()]).distinct()

0voto

Raunak Agarwal Points 3397

Fondamentalement, vous avez besoin d'une recherche inversée du côté de la catégorie pour vérifier s'il y a un livre pour cette catégorie, si oui, ajoutez-le à l'ensemble de la requête résultante. Étant donné que l'argument related_name dans le livre est "categories", votre recherche inversée ressemblerait à quelque chose comme ceci.

  Category.objects.filter(categories__in = Book.objects.all())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X