如何在Django CB列表视图中使用上下文调用函数?

时间:2018-09-26 08:30:16

标签: django django-models django-rest-framework django-templates django-views

这是我的观点:

class viewbloglistview(LoginRequiredMixin,ListView):
    model = Blog
    paginate_by = 6

    def get_template_names(self):
        if True:  
            return ['blog/view_blogs.html']
        else:
            return ['blog/blog_list.html']

    def get_queryset(self):
        return Blog.objects.all().order_by('-blog_views')[:20]

    def get_context_data(self, **kwargs):
        context = super(viewbloglistview, self).get_context_data(**kwargs) 
        context['categories_list'] = categories.objects.all()
        return context

这是我在models.py文件中的功能:

    def categories_count(self):
        categories_count = categories.objects.annotate(blog_count=Count('blogs')).values_list('Title','blog_count')
        return categories_count

我想使用上下文名称在视图中调用该函数以在模板中呈现活动。

有人可以帮我解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:0)

这是一个python问题,您的问题尚不清楚,但基于您所说的内容:

  • 仅在您的model.py中使用该功能:

    from . import model.py
    // code
    categories_count()
    
  • 该函数是类中的一个方法,如代码中所显示的那样,其中包含self参数:

    from . import model.py
    // code
    classname.categories_count()
    

答案 1 :(得分:0)

假设您已将您的课程命名为“类别”(应该首先将其命名为“类别”),

在类级别进行查询时,

categories_count应该已经在管理器中。假设您不需要管理者,并且希望将代码保留在模型中,那么可以将其用作类方法。

@classmethod
def categories_count(cls):
    return cls.objects.annotate(blog_count=Count('blogs')).values_list('Title','blog_count')

,并且在视图中将其用作

categories.categories_count()

请记住,带有'self'参数的常规方法(如您所拥有的常规方法)应仅在处理单个实例时使用,而不是在访问类本身时使用。