фильтровать теги django-taggit в Queryset Django

Имея следующие модели:

class Post(models.Model): title = models.CharField(max_length=250) tags = TaggableManager() 

и данные:

  • Как я могу визуализировать древовидную структуру (рекурсивную) с использованием шаблона django?
  • Django - в чем разница между render (), render_to_response () и direct_to_template ()?
  • Обнаруживать, изменилась ли модель до вызова сохранения в Django
  • Django FileField с upload_to определяется во время выполнения
  • Как я могу программно получить max_length поля модели Django?
  • Django: таблица не существует
  •  **post.title** **post.tags** Django By Example python,django,web Who was Django Reinhardt python,django, Test-Driven Development with Python python,web Python for Data Analysis python,data Learning Python python Programming Python python Automate the Boring Stuff with Python python 

    Я пытаюсь сделать код ниже

     >>> alist=Post.objects.filter(tags__name__in=["data","python"]) >>> for i in alist.annotate(sam_tags=Count('tags')): ... print("\n---",i) ... print("tags of it : ",i.tags.all()) ... print("value of sam_tags : ",i.sam_tags) ... --- Django By Example tags of it : [<Tag: django>, <Tag: python>, <Tag: web>] value of sam_tags : 1 --- Who was Django Reinhardt tags of it : [<Tag: django>, <Tag: python>] value of sam_tags : 1 --- Automate the Boring Stuff with Python tags of it : [<Tag: python>] value of sam_tags : 1 --- Test-Driven Development with Python tags of it : [<Tag: python>, <Tag: web>] value of sam_tags : 1 --- Learning Python tags of it : [<Tag: python>] value of sam_tags : 1 --- Python for Data Analysis tags of it : [<Tag: data>, <Tag: python>] value of sam_tags : 2 --- Programming Python tags of it : [<Tag: python>] value of sam_tags : 1 >>> 

    почему значение slist [0] .sam_tags (post: Django By Example) равно 1?

    Я думаю, что объект post (post: Django By Example) имеет три метки [python, django и web] после чтения документации Django.

    https://docs.djangoproject.com/en/1.10/ref/models/querysets/#count

    Он сказал, что Count (выражение) возвращает количество объектов, которые связаны через предоставленное выражение. поэтому код

     >>>alist[0].tags.all() [<Tag: django>, <Tag: python>, <Tag: web>] 

    показывает, что есть три метки в alist [0] .tags,

     >>> slist=alist.annotate(sam_tags=Count('tags')) >>> slist[0].tags.all() [<Tag: django>, <Tag: python>, <Tag: web>] >>> slist[0].sam_tags 1 

    но здесь я получаю значение 1,
    Зачем?

    Я понимаю, что Django учитывает только те теги «python» и «data», которые я включил в мое предложение фильтра, – другие теги не учитываются.

    Вывод «slist [0] .tags.all ()» показывает, что slist [0] имеет три тега, связанные с самим собой. Поскольку в документации django указано, что Count (выражение) возвращает количество объектов, связанных с предоставленным выражением, slist [0] .sam_tags должно быть 3 согласно документации, но django-taggit делает slist [0] .sam_tags для 1.

    Так что я действительно хочу знать, так это то, как django-taggit позволяет Count (выражение) в выражении фильтра вычислять только количество тегов в условии фильтра.

  • Django - нет модуля с именем PIL
  • Объект TypeError 'x' не имеет атрибута '__getitem__'
  • Переопределить форму в администраторе Django
  • Django - MySQLdb: Символ не найден: _mysql_affected_rows
  • Django формирует множественный выбор
  • Запрос соответствия сайта не существует
  • One Solution collect form web for “фильтровать теги django-taggit в Queryset Django”

    Django учитывает только теги python и data которые вы включили в предложение фильтра, – другие теги не учитываются. (Обратите внимание, что единственный пример с sam_tags из 2 – это те, которые отмечены как data и python .) Это, вероятно, неожиданное поведение, но имеет смысл, если вы рассматриваете, как выполняется базовый SQL. См. Этот пример из аналогичной схемы:

     >>> a = Article.objects.filter(tags__slug__in=['python']).annotate(num_tags=Count('tags'))[0] >>> a.num_tags 1 >>> a.tags.count() 2 

    Если я изменяю предложение фильтра для фильтрации на somethign, отличном от тегов, оно ведет себя так, как ожидалось:

     >>> Article.objects.filter(pk=a.pk).annotate(num_tags=Count('tags'))[0].num_tags 2 >>> Article.objects.filter(pk=a.pk).annotate(num_tags=Count('tags'))[0].tags.count() 2 
    Python - лучший язык программирования в мире.