如何制作标签?

时间:2010-07-06 10:49:59

标签: database django forms tags

如果我有一个问答系统,并且我想添加一个标记功能,就每个问题我应该有一些标记,用逗号分隔(就像Stackoverflow一样):

  1. 我希望有一个单独的类模型,带有问题的外键
  2. 在表单中,我希望用户能够添加多个标记,用逗号分隔,并且在提交表单时,我希望将标记存储在表格中:每个标记都是注册
  3. 我应该在表单中使用什么,以便用逗号分隔的标签保存在数据库中,每个标签都注册? (为了便于搜索)

    由于

4 个答案:

答案 0 :(得分:7)

django-taggit

更新:阅读文档以了解标记输入字符串如何生成标记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>