【问题标题】:how to make tags?如何制作标签?
【发布时间】:2011-03-12 06:18:07
【问题描述】:

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

  1. 我想为此创建一个单独的类模型,其中包含问题的外键
  2. 在表单中,我希望用户能够添加多个标签,以逗号分隔,并且在提交表单时,我希望将标签存储在一个表中:每个标签一个注册

我应该在表格中使用什么,以便以逗号分隔的标签保存在数据库中,每个标签注册一个? (便于搜索)

谢谢

【问题讨论】:

    标签: database django forms tags


    【解决方案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>
        

        【讨论】:

          猜你喜欢
          • 2018-02-23
          • 1970-01-01
          • 2016-12-04
          • 2017-12-16
          • 1970-01-01
          • 2021-07-19
          • 2020-05-23
          • 2021-07-08
          相关资源
          最近更新 更多