我在我的一个项目上使用django-taggit,我可以保存标签并将其与特定记录绑定.现在的问题是如何显示与每条记录相关的标签?
例如,在我的页面上,我想要显示包含标题和内容的记录,然后在其下面我想显示与该记录关联的标记.
views.py和mytemplate.html中有什么内容?真实的例子将是真正的赞赏.
我已经开始使用django-taggit,它似乎符合要求.但对我来说,管理网站仍有问题:
我tags在ModelAdmin中包含了这个属性,如下所示:
class MyModel(db.models.Model):
name = models.CharField(max_length=200)
tags = TaggableManager()
class MyModelAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('name', 'tags')
}),
)
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行.但是当我在管理员中编辑模型时,如果TagField为空,我会收到错误.表单似乎很满意只有一个空白,这导致没有标记被保存(如预期的那样).但是空标记字段会触发错误.
我能做什么?
我想弄清楚为什么当我提交表单时,我的标签不会保存在我的数据库中.django-rest-framework和Django-taggit也很新,我觉得我做错了:)
首先,在使用rest-framework创建API之前,我使用通用视图(CreateView和UpdateView)来注册/验证我的事件.它工作正常,但我决定进一步尝试构建一个API,因为我现在正在使用Angularjs.
现在我的模型事件已创建,但没有我的标签,我有一些错误.我放了一些代码,之后我会描述我的错误.
事件/ models.py
class Event(models.Model):
[...]
title = models.CharField(max_length=245, blank=False)
description = models.TextField(max_length=750, null=True, blank=True)
start = models.DateTimeField()
end = models.DateTimeField()
created_at = models.DateTimeField(editable=False)
updated_at = models.DateTimeField(editable=False)
slug = AutoSlugField(populate_from='title', unique=True, editable=False)
expert = models.BooleanField(choices=MODE_EXPERT, default=0)
home = models.BooleanField(choices=HOME, default=0)
nb_participant = models.PositiveSmallIntegerField(default=1)
price = models.PositiveSmallIntegerField(default=0)
cancelled = models.BooleanField(default=0)
user = models.ForeignKey(User, editable=False, related_name='author')
address = models.ForeignKey('Address', editable=False, related_name='events')
participants = models.ManyToManyField(User, related_name='participants', blank=True, editable=False,
through='Participants')
theme_category = models.ForeignKey('EventThemeCategory', unique=True, editable=False)
tags = TaggableManager(blank=True)
class Meta:
db_table = …Run Code Online (Sandbox Code Playgroud) 我想用django-taggit(点击这里).文档(单击此处)讨论了使用ModelForm生成表单,但我已经使用了我想要使用的表单.
假设我有这样的事情:
forms.py
class MyForm(forms.Form):
......
tags = forms.CharField(max_length=200, widget=forms.Textarea)
Run Code Online (Sandbox Code Playgroud)
如何保存来自tags现场的标签?我的是什么views.py?一个真实的例子将是真正的赞赏.
django django-models django-forms django-views django-taggit
如何从django-taggit获取所有(唯一)标签?我想在侧栏中显示所有标签.目前我能够获得特定帖子的所有标签,但现在我需要在整个博客中获取所有唯一标签.
models.py中的代码:
from django.db import models
from taggit.managers import TaggableManager
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
created = models.DateTimeField()
tags = TaggableManager()
Run Code Online (Sandbox Code Playgroud) 我在我的模型中添加了tags = TaggableManager(blank = True),但我希望我的标签不区分大小写.为此我看到了一些工作片段,想问一下是否有一种简单的方法可以做到这一点?如果我必须覆盖TaggableManager中的某些方法,请告知我该怎么做?
在此先感谢Arshavski Alexander.
背景:我有5个独立的Django项目,我试图将它们合并到由几个应用程序组成的1个Django项目中.换句话说:projA有appA,projB有appB&projC有appC等我想要1个masterProj有appA,appB和appC.
目前,每个应用程序都连接到它自己的独立数据库(应用程序不共享数据).每个项目都使用Django用户身份验证,Django注册,taggit,配置文件,注释和sorl-thumbnail.
我正在使用Django 1.4并根据此stackoverflow答案设置数据库路由,这样,一旦合并到一个项目中,新组合的Django项目中的每个应用程序仍然能够连接到自己的数据库.这很顺利,但我开始遇到用户身份验证和taggit等问题:
1)如前所述,每个应用程序连接到不同的数据库,每个数据库都有一个名为"auth_user"的表.但是,我发现对auth_user表的所有读/写调用(无论哪个应用程序进行读/写调用)都被路由到默认数据库(在本例中为appA的数据库):
# settings.py:
DATABASES['default'] = DATABASES['appA']
DATABASE_ROUTERS = ['appA.db.DBRouter', 'appB.db.DBRouter', 'appC.db.DBRouter']
# appA/dbrouterA.py (appB, appC routers are identical this, replacing 'appA' with 'appB', etc.)
class DBRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
Run Code Online (Sandbox Code Playgroud)
2) 假设我使路由工作,如果用户登录appA,我不希望他们登录到appB.我见过很多人发布了相反的问题(他们希望他们的应用程序共享用户凭据)但有没有人在同一个项目中的几个独立应用程序中成功使用Django用户身份验证?如果是这样,你是怎么做到的?
3)我从我的taggit代码中得到以下错误,但我无法弄清楚如何将"related_name"参数传递给taggit.我正在使用taggit的基本实现 - 而不是子类化任何东西:
# …Run Code Online (Sandbox Code Playgroud) 我正在构建一个基本的时间记录应用程序,我有一个使用django-taggit的待办事项模型.我的Todo模型看起来像这样:
class Todo(models.Model):
project = models.ForeignKey(Project)
description = models.CharField(max_length=300)
is_done = models.BooleanField(default=False)
billable = models.BooleanField(default=True)
date_completed = models.DateTimeField(blank=True, null=True)
completed_by = models.ForeignKey(User, blank=True, null=True)
tags = TaggableManager()
def __unicode__(self):
return self.description
Run Code Online (Sandbox Code Playgroud)
我正在尝试为项目中的所有Todos获取一个唯一标记列表,并且我已经设法使用集合理解来使其工作,但是对于项目中的每个Todo,我必须查询数据库以获取标记.我的理解是:
unique_tags = { tag.name.lower() for todo in project.todo_set.all() for tag in todo.tags.all() }
Run Code Online (Sandbox Code Playgroud)
这很好用,但是对于项目中的每个待办事项,它都会运行一个单独的查询来获取所有标记.我想知道是否有任何方法可以执行类似于prefetch_related的操作以避免这些重复的查询:
unique_tags = { tag.name.lower() for todo in project.todo_set.all().prefetch_related('tags') for tag in todo.tags.all() }
Run Code Online (Sandbox Code Playgroud)
运行前面的代码给我错误:
'tags' does not resolve to a item that supports prefetching - this is an invalid parameter to prefetch_related().
Run Code Online (Sandbox Code Playgroud)
我确实看到有人在这里问了一个非常相似的问题:优化django查询以获取外键和django-taggit关系, …
我有一个使用django-taggit的模型.我想执行一个向此模型添加标记的南数据迁移.但是,在南迁移中无法使用.tags管理器,您必须使用南方orm ['myapp.MyModel'] API而不是普通的Django orm.
执行这样的操作会抛出异常,因为post.tags为None.
post = orm['blog.Post'].objects.latest()
post.tags.add('programming')
Run Code Online (Sandbox Code Playgroud)
是否可以在南数据迁移中使用taggit创建和应用标签?如果是这样,怎么样?
这是一个模型类
class ModelName(models.Model):
(...)
pasta = TaggableManager(verbose_name=u'Pasta')
Run Code Online (Sandbox Code Playgroud)
和一个表单模板(正常:P)
{{form.as_p}}
我想让一切都非常干净和有用。但结果是一个 TaggedItem 对象列表 :( :
[<TaggedItem: id: 2 tagged with general >, <TaggedItem: id: 3 tagged with outer >]
Run Code Online (Sandbox Code Playgroud)

而不是像
general, outer
Run Code Online (Sandbox Code Playgroud)
在 Django 中如何时尚?