2017-09-16 65 views
0

我正在做Django項目,以深入其中。模型部分有問題。有模型; CompanyProductCategoryCompany只是簡介部分。 Product是關於一個公司的產品,它的分類是ManyToManyField過濾器公司基於類別

我列出了頁面中的所有類別,如果某個類別被點擊,那麼具有該類別產品的公司列表應該被過濾。但我不知道如何訪問它。

這裏是我的模型

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') 

回答

2

您可以應用過濾器:

Company.objects.filter(products__categories__slug=category_slug) 

其中category_slug它是您當前的價值選擇Category.slug

細節:

1 )如果我們需要得到Category

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

2)如果我們需要得到所有Product這一類

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

或加雙下劃線many2many模型字段名

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

3)如果需要獲得Company的所屬類別,按相關型號的相關名稱過濾Companycompany = models.ForeignKey('Company', related_name='products'

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

或類別,例如

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

或finaly按類別蛞蝓值

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

所以我應該使用像'''{{category.name}}'''然後是網址? – milan

+0

我收到以下錯誤無法將關鍵字'產品'解析爲字段。 – milan

+0

對不起,我錯過了產品中的s。你能解釋我的鏈嗎? – milan