我想在主页上显示顶级类别。我编写了top_categories函数来列出拥有最多产品的类别。但是我已经在产品模型中编写了这个函数。我不知道该在哪里写这个。这是我的密码
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)
categories = models.ManyToManyField(Category, related_name='products')
def top_categories(self):
product = Product.objects.values('id').annotate(
categories_count=models.Count('categories')).order_by('-categories_count')
return product
def home(request):
categories = Category.objects.all()
companies = Company.objects.all()[:12]
context = {
'categories': categories,
'companies': companies
}
return render(request, 'company/home.html', context)
现在有一个困惑,我是否必须在Category model中实现top\ u categories函数,或者我正在做的方式很好?因为在主页中显示内容的工作是主视图的角色
我建议您使用templatetags,因为如果您使用
views
处理这种情况,您将为另一个页面创建类似的流行过滤器然后,您可以在模板
company/home.html
中使用它您可以在视图.py中执行此操作
在home.html中
我想我会这样做:
使其成为静态方法,因为它与实例无关。更好的方法是扩展Category manager并向其添加方法
get_top_category
,这样就可以调用Category.objects.get_top_category()
。那就在你的产品模型里说吧:一些doc to override managers
相关问题 更多 >
编程相关推荐