Как вызвать функцию с контекстом в представлении списка django CB? - PullRequest
0 голосов
/ 26 сентября 2018

Это мой взгляд:

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 голосов
/ 27 сентября 2018

Предполагая, что вы назвали свой класс «категориями» (который должен был быть назван как «категория»),

category_count должен был находиться в менеджере, когда вы запрашиваете на уровне класса.Скажем, вы не хотите иметь менеджера и хотите сохранить код внутри модели, тогда вы можете использовать его как метод класса.

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

и в представлениях использовать его как

categories.categories_count()

Просто помните, что обычные методы с аргументом 'self', подобным тому, который у вас есть, должны использоваться только когда вы имеете дело с одним экземпляром, а не когда вы обращаетесь к самому классу.

0 голосов
/ 26 сентября 2018

Это проблема с питоном, ваш вопрос неясен, но основан на том, что вы сказали:

  • Регистрируйте функцию в одном только вашем model.py:

    from . import model.py
    // code
    categories_count()
    
  • Случай, когда функция является методом в классе, как показано в вашем коде с параметром self в нем:

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