如果我有一个问答系统,并且我想添加一个标记功能,就每个问题我应该有一些标记,用逗号分隔(就像Stackoverflow一样):
我应该在表单中使用什么,以便用逗号分隔的标签保存在数据库中,每个标签都注册? (为了便于搜索)
由于
答案 0 :(得分:7)
更新:阅读文档以了解标记输入字符串如何生成标记http://github.com/alex/django-taggit/blob/master/docs/forms.txt
答案 1 :(得分:3)
我同意你最好使用可重复使用的标记应用,但如果你不害怕弄脏,请查看Django contenttypes framework
答案 2 :(得分:0)
是啊.. 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
答案 3 :(得分:0)
根据2020,这是有效的,简单的Django解决方案: models.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>