如何在 django 模板中分隔类别

时间:2021-04-27 18:10:17

标签: django django-views django-templates

我收到此错误: /product/ 处的值错误 精确查找的 QuerySet 值必须使用切片限制为一个结果。

这是我的模型:

class Categorie (models.Model):
    
    title = models.CharField(max_length=50)
    category_slug = models.SlugField(blank=True)
    
    def __str__(self):
      return self.category_slug 

class Products(models.Model): 
    category = models.ForeignKey(Categorie,on_delete=models.CASCADE,null=True, 
     related_name="product")
    product_slug = models.SlugField(blank=True)
    product_title = models.CharField(max_length=50 , null=True)
    product_name = models.CharField(max_length=100 , null=True )
    product_describe = models.CharField(max_length=200 , null=True)
    product_picture = models.ImageField(upload_to='img_pro' , null=True)
    product_created_at = models.DateField(auto_now_add=True)
    product_updated_at = models.DateField(auto_now=True)
    
    def __str__(self):
      return self.product_slug 

这是我的观点:

    def index(requset):    
        category = Categorie.objects.all() 
        product = Products.objects.filter(category_slug=category)  
        context = {
              'category':category,
              'product ':product ,
        }
        return render( requset , 'product/index.html' , context)

这是我的模板:

{% for cat in category %}                   
      <div class="fix single_content">           
      <h2>{{cat.title}}</h2>         
      <div class="fix">  
        {% for pro in product %}         
        <ul>
          <li>
           <div class="entry_name"><a href=""><img src="{{pro.product_picture.url}}" alt=""><span>  
           {{pro.product_title}}</span></a><h6>{{pro.product_name}}</h6></div>
          </li>  
        </ul>           
        {% endfor %}                              
      </div> 
{% endfor %}   

这是 myapp.urls:

from django.urls import path 
from . import views
urlpatterns = [    
path('' , views.index , name='index' ),    
]

有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

在您的索引视图中,您正在传递您在 vategory 中的所有内容

category = Categorie.objects.all() 

虽然它只期待一件事

category = Categorie.objects.get(id=pk) # pk or category_id or slug or whatever you named it in your url

所以你的视图应该看起来像

def index(requset,pk):    
    category = Categorie.objects.get(id=pk) 
    product = Products.objects.filter(category=category)  
    context = {
          'category':category,
          'product ':product ,
    }
    return render( requset , 'product/index.html' , context)

答案 1 :(得分:0)

如果您想获得单个类别的产品,请使用:

category = Categorie.objects.filter(category_slug='<slug-to-search>').first() 
product = Products.objects.filter(category=category) 

但是如果您想要多个类别的产品,请使用此:

categories = Categorie.objects.all() 
products = Products.objects.filter(category__in=categories) 
相关问题