如何制作标签?
Posted
技术标签:
【中文标题】如何制作标签?【英文标题】:how to make tags? 【发布时间】:2011-03-12 06:18:07 【问题描述】:如果我有一个问答系统,并且我想添加一个标签功能,那么对于每个问题我都应该有一些标签,用逗号分隔(就像 *** 一样):
-
我想为此创建一个单独的类模型,其中包含问题的外键
在表单中,我希望用户能够添加多个标签,以逗号分隔,并且在提交表单时,我希望将标签存储在一个表中:每个标签一个注册
我应该在表格中使用什么,以便以逗号分隔的标签保存在数据库中,每个标签注册一个? (便于搜索)
谢谢
【问题讨论】:
【参考方案1】:django-taggit
更新:阅读文档以查看标签输入字符串如何生成标签,http://github.com/alex/django-taggit/blob/master/docs/forms.txt
【讨论】:
hmmm...我不敢用它,我是初学者,怕短时间内看不懂代码 似乎是非维护 django-tagging 的一个很好的替代品。【参考方案2】:我同意你最好使用可重复使用的标记应用程序,但如果你不怕弄脏你的手,请查看Django contenttypes framework
【讨论】:
【参考方案3】:是的.. contenttypes 框架是创建标签的最佳方式。
class TagName(models.Model):
name = models.CharField(max_length=255)
class Meta:
pass
class Tag(Model):
tag = models.ForeignKey(TagName, related_name="tag_objects")
content_type = models.ForeignKey(ContentType, blank=True, null=True)
object_id = models.TextField(ugettext('object id'), blank=True, null=True)
content_object = GenericForeignKey('content_type', 'object_id')
class Meta:
pass
【讨论】:
【参考方案4】:根据 2020 年,这是有效的简单 django 解决方案: 模型.py:
from django.db import models
from django.contrib.auth.models import User
class ExamplePost(models.Model):
Title = models.CharField(max_length=100)
Tags = models.ManyToManyField('Need', related_name='plants')
entry_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'self.species'
class ExampleTag(models.Model):
Name = models.CharField(max_length=100)
Link = models.URLField(max_length=1000, null=True, blank=True, default="None")
def __str__(self):
return f'self.title'
在example.html中:
<div class="card-body">
<h2 class="card-title"> ExamplePost.title </h2>
<h5> Tags : </h5>
<ul class="list-group list-group-horizontal-sm">
% for Tag in ExamplePost.tags.all %
<p class="p-2 bg-light text-warning">
<h3><span class="badge badge-pill badge-warning"> ExampleTag.name </span></h3>
</p>
% endfor %
</ul>
</div>
【讨论】:
以上是关于如何制作标签?的主要内容,如果未能解决你的问题,请参考以下文章