我有一个相当简单的模型,使用Django Taggit进行标记.
一切都很好,但现在我想扩展一些功能,我有点困惑.
我想要的是两种观点.
一个显示系统中的所有标签.一个显示我的应用程序中具有特定标记的所有内容.
对我来说有意义的是为每个视图执行以下操作.
在views.py中为myapp
所有标签
来自myapp.models导入App
来自taggit.models导入标签
class TagList(ListView):
msgstr"""获取db中的所有标签"""
queryset = Tag.objects.all()
template_name = "myapp/TagList.html"
paginate_by = 10
Run Code Online (Sandbox Code Playgroud)标签的所有内容
来自myapp.models导入App
来自taggit.models导入标签
class TaggedList(ListView):"""获取标签的所有内容"""
template_name = "myapp/TaggedList.html"
def get_object(self):
return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
Run Code Online (Sandbox Code Playgroud)我是不是已经失去了理智,还是那么容易?顺便说一下,我正在使用泛型类视图.
谢谢您的帮助.戴夫
我在这里浏览了自定义文档https://django-taggit.readthedocs.io/en/latest/custom_tagging.html#genericuuidtaggeditembase
我正在使用以下代码,当我通过django admin保存产品时,表已正确填充,但是当我读取产品时,标签将显示为None
catalog / models.py
from django.db import models
from django.db.models import ImageField
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from taggit.managers import TaggableManager
from taggit.models import GenericUUIDTaggedItemBase, TaggedItemBase
from common.models import ModelBase
from customer.models import ApplicationUser
from order_quick.settings import APPLICATION_CURRENCY_SYMBOL
class TaggedItem(GenericUUIDTaggedItemBase, TaggedItemBase):
class Meta:
verbose_name = _("Tag")
verbose_name_plural = _("Tags")
class Product(ModelBase):
supplier = models.ForeignKey(ApplicationUser, on_delete=models.DO_NOTHING)
name = models.CharField(max_length=255)
description = models.CharField(max_length=255)
image = ImageField(upload_to='images/products/', blank=True, null=True)
cost_price = models.DecimalField(max_digits=9,
decimal_places=2,
verbose_name="Cost Price …Run Code Online (Sandbox Code Playgroud) 在这里发疯......从外壳内,我可以这样做:
product.tags.add("a_new_tag")
Run Code Online (Sandbox Code Playgroud)
标签被添加到数据库中,标签与产品的关联工作正常。(即当我做Product.objects.filter(tags__name__in=["a_new_tag"]相应的产品时吐出来)
我需要做的是在处理表单时在管理中添加一些标签。
这是我的表单代码(阅读第 4 行和第 5 行中的注释):
class ProductForm(ModelForm):
def save(self, commit=True):
product = super(ProductForm, self).save(commit=False)
product.type="New Type to Confirm Info is being Saved Correctly" //this is saved to the product.
product.tags.add('a_new_tag_1') //the tag is saved to the taggit db, but the association with the product isn't kept.
product.save()
self.save_m2m()
return m
Run Code Online (Sandbox Code Playgroud)
我尝试在管理类中进行保存,但这也不起作用:
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
def save_model(self, request, obj, form, change):
obj.type="new_type" //this works
obj.tags.add("a_new_tag_2") //tag association not saved
obj.save()
form.save_m2m()
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?提前致谢!
我正在使用 django-taggit。我希望所有标签都小写,还设置标签编号的范围(比如在 1 到 5 之间,就像 stackoverflow 一样)。有什么办法可以用 django-taggit 轻松做到这一点吗?谢谢!
说我有一个模型:
class Entry(models.Model):
...
tags = TaggableManager()
Run Code Online (Sandbox Code Playgroud)
当我在模板中迭代Entry.objects.all()时,entry.tags.all会再向数据库生成一个查询.是否可以减少查询数量?使用像select_related()这样的东西(我知道它不会起作用,因为django-taggit使用了很多关系,但我确信应该有一种方法可以选择所有带有相关标签的条目)
我正在使用django-taggit创建一个应用程序,不仅存储待办事项,还存储信息项.可以标记待办事项和信息项.
当我为待办事项提取标签列表时,我运行以下查询:
action_tags = Tag.objects.order_by('name').filter(action__complete=False).annotate(action_count=Count('action'))
Run Code Online (Sandbox Code Playgroud)
这给了我所有标签,其中有不完整的待办事项.它还给了我不完整的待办事项数.
对于信息项,没有"完整"字段; 信息项只是"是".所以我想编写一个查询,提取至少有一个信息项的所有标签.怎么写的?
我可以在模板中像这样一一获取所有标签的名称
{% for tag in blog.tags.all %}
<span class="label label-default">{{ tag.name }}</span>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我可以从这样的表单中获取输入{{ form.tags }},它给了我:
<input id="id_tags" name="tags" type="text" value="xxx,y y y,zzz">
Run Code Online (Sandbox Code Playgroud)
但是我想像这样在我的模板中自定义我的输入
<input id="id_tags" class="form-control" maxlength="50" name="title" type="text" placeholder="tags" value="{{ form.tags }}">
Run Code Online (Sandbox Code Playgroud)
如何设置输入的值=“ {{ form.tags }}”?
I have models that uses UUID as its PK
class Foo(models.Model):
foo_id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False
)
tags = TaggableManager()
Run Code Online (Sandbox Code Playgroud)
When I go and try to add a new tag
f = Foo.objects.latest('pk')
f.tags.add("testing")
Run Code Online (Sandbox Code Playgroud)
I get DataError: integer out of range
When I import pdb on the cursor to view the SQL going in I see this.
(Pdb) params
(1, 287082253891563438098836942573405313042, 9)
(Pdb) sql
'INSERT INTO "taggit_taggeditem" ("tag_id", "object_id", "content_type_id") VALUES (%s, %s, %s) RETURNING "taggit_taggedit
m"."id"'
Run Code Online (Sandbox Code Playgroud)
That long …
使用django-taggit-templatetags2,我可以在模板页面中显示与测试vlog关联的所有标签.
我存储在数据库中的vlogs尚未发布给公众(仅在特定日期之后显示),因此我可以在数据库中存储大量的vlog详细信息,然后在某一天自动释放每个单独的视频博客(例如星期二)每周).
这意味着django-taggit-templatetags2显示的所有代码都{% for tag in vlog_tags %}将包含vlog条目的标签,这些标签尚未在vlog中显示给用户但存储在db中.
如何只显示vlog_date_published不大于的vlog条目的标签和计数now?可能存在用于已发布和尚未发布的vlog条目的相同标记.所以这应该考虑到标签的显示.
这是我的模型代码:
from taggit.managers import TaggableManager
class VlogDetails(models.Model):
....
vlog_date_published = models.DateField(null=False, blank=False, default=datetime.now, help_text='The date the vlog video will be made public.')
vlog_tags = TaggableManager(blank=True, help_text='To make a new tag, add a comma after the new tag name.')
....
Run Code Online (Sandbox Code Playgroud)
这是显示所有标签模板代码:
{% load taggit_templatetags2_tags %}
{% get_taglist as vlog_tags %}
{% for tag in vlog_tags %}
{% if tag.num_times > 0 …Run Code Online (Sandbox Code Playgroud) 目前,我仍在学习 Django 并使用 Django 2.2 创建我的博客。但不知何故,当我使用 django-taggit 时出现错误。
如何通过标签过滤帖子?
我已阅读文档,但没有完全介绍如何将其实现到实际项目中。
这是我的代码:
我尝试了几种不同的方法,仍在 StackOverflow 中搜索,但仍然没有答案。
的结果与 的结果/blog/tag/post-tagged相同/blog。那么我该如何过滤它views.py呢?或者也许来自blog.html?
所以结果/blog/tag/post-tagged仅来自标记的帖子。
这是我的代码:
models.py:
...
from taggit.managers import TaggableManager
"Post Model"
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, null=True, blank=True, unique=True)
title = models.CharField(max_length=200)
tags = TaggableManager(blank=True)
...
Run Code Online (Sandbox Code Playgroud)
views.py:
def blogIndex(request):
posts = Post.objects.all().order_by("-created_date")[0:4]
context = {"posts": posts,}
return render(request, 'blog.html', context)
def Tagging(request, slug):
tags = Tag.objects.filter(slug=slug)
posts = Post.objects.all().order_by("-tags") …Run Code Online (Sandbox Code Playgroud)