2017-09-16 1 views
0

Je faisais le projet sur Django pour approfondir. J'ai un problème dans la partie du modèle. Il y a des modèles; Company, Product, Category. Company est simplement la partie d'introduction. Product est sur quel produit une entreprise a et est divisé en catégorie qui est ManyToManyField.société de filtre basée sur la catégorie

J'ai une liste de toutes les catégories dans une page où si une certaine catégorie est cliquée, alors la liste des entreprises qui a produit de cette catégorie doit être filtrée. Mais je ne sais pas comment y accéder.

Voici mon modèle

class Category(models.Model): 
    name = models.CharField(max_length=50) 
    slug = models.SlugField(max_length=50, unique=True) 

class Product(models.Model): 
    name = models.CharField(max_length=200, unique=True, blank=False, null=False) 
    company = models.ForeignKey('Company', related_name='products', blank=True, null=True, on_delete=models.SET_NULL) 
    website = models.URLField(unique=True) 
    slug = models.SlugField(unique=True) 
    categories = models.ManyToManyField(Category, related_name='products') 


class Company(models.Model): 
    name = models.CharField(max_length=200, unique=True, blank=False, null=False) 
    slug = models.SlugField(unique=True) 
    description = models.CharField(max_length=400) 
    editor = models.ForeignKey(User, related_name='company') 
    # product = models.ForeignKey(Product, related_name='company') 

Répondre

2

Vous pouvez appliquer le filtre:

Company.objects.filter(products__categories__slug=category_slug) 

category_slug est la valeur de votre actuelle sélectionnez Category.slug

détails:

1) si nous devons obtenir Category

cat = Category.objects.get(slug=category_slug) 

2) si nous avons besoin obtenir tous Product dans cette catégorie

product_list = Product.objects.filter(categories=cat) 

ou ajouter un double underscore au nom many2many de champ modèles

product_list = Product.objects.filter(categories__slug=cat) 
#            ^^^^ 

3) si besoin se Company pour la Product_List , filtre par related_name du modèle associé Product dans le champ FK sur le Companycompany = models.ForeignKey('Company', related_name='products'

Company.objects.filter(products__in=product_list) 
#      ^^^^^^^ 

ou par catégorie exemple

cat = Category.objects.get(slug=category_slug) 
Company.objects.filter(products__categories=cat) 

ou par catégorie finaly valeur limaces

Company.objects.filter(products__categories__slug=category_slug) 
+0

donc je devrais utiliser l'URL comme '' '' '' {{category.name}} alors? – milan

+0

Je reçois l'erreur suivante Impossible de résoudre le mot clé 'produit' dans le champ. – milan

+0

Désolé, j'ai manqué le s dans le produit. Pouvez-vous m'expliquer ce chaînage, s'il vous plaît? – milan