Skip to main content
 首页 » 编程设计

python之Django:在页面中列出每个类别的产品

2025年05月04日24zhwl

我有几个类别,我想按以下格式列出每个类别的产品(类别是产品的 FK):

类别 1

一堆产品

....

N类

一堆产品

我尝试了很多方法,但到目前为止,我只获得了类别,而没有获得要在我的 HTML 中显示的产品。

模型.py

class Category(models.Model): 
    title = models.CharField(max_length=225) 
    slug = models.SlugField(unique=True, blank=True, null=True) 
 
    def __str__(self): 
        return self.title 
 
    def get_absolute_url(self): 
        return reverse('category_detail', kwargs={'slug': self.slug}) 
 
    @property 
    def get_products(self): 
         return Products.objects.filter(category=self.title) 
 
class Products(models.Model): 
    title = models.CharField(max_length=225) 
    image = models.ImageField(upload_to=upload_image_path, null=True, blank=True) 
 blank=True, on_delete=models.CASCADE) 
    categories = models.ForeignKey(Category, related_name='Category', blank=True, on_delete=models.CASCADE) #this 
    gender = models.CharField(max_length=20, choices=GENDER_CHOICES, default="male") 
 
    objects = ProductManager() 
 
    def get_absolute_url(self): 
        return reverse('product_detail', args=(self.id,)) 
 
    def __str__(self): 
        return self.title 

View .py

def categories_m(request): 
    query_Set = models.Category.objects.all() 
    page = request.GET.get('page', 1) 
    paginator = Paginator(query_Set, 20) 
    try: 
        cat = paginator.page(page) 
    except PageNotAnInteger: 
        cat = paginator.page(1) 
    except EmptyPage: 
        cat = paginator.page(paginator.num_pages) 
    return render(request, 'products/categories.html', {'categories': cat}) 

html

{% extends 'base.html' %} 
 
{% block content %} 
{% for category in categories %} 
    <h1>{{ category }}</h1> 
    {% for product in categories.get_products %} 
        <p>{{ product }}</p> 
    {% endfor %} 
{% endfor %} 
{% endblock %} 

请您参考如下方法:

它应该是 category 而不是模板中的 categories。并在您的模型中按类别标题过滤产品。

@property 
def get_products(self): 
     return Products.objects.filter(categories__title=self.title) 


{% extends 'base.html' %} 
 
    {% block content %} 
        {% for category in categories %} 
        <h1> {{category}} </h1> 
 
        {% for product in category.get_products %} 
            <p> {{product}} </p> 
        {% endfor %} 
 
        {% endfor %} 
    {% endblock %}