django - 如何使用 taggit-selectize 以便所有用户制作的标签都显示在自动完成中?
问题描述
我找到了这个项目https://github.com/chhantyal/taggit-selectize,它似乎做我想做的事,但是示例应用程序不完整,所以我不知道如何使用它。我基本上想要的是用户将能够为帖子编写自己的标签,并且如果他们输入的是其他人以前使用过的标签,它将显示在自动完成中。我还想要一个以相同方式使用自动完成功能的搜索功能。我确信它不是很复杂,但自述文件只解释了如何安装以及一些事情的含义,我正在寻找一个非常简单的工作示例来使自动完成工作。
提前致谢。
解决方案
我有一个非常具体的用例。我希望我的示例不会使事情过于复杂(我在我的 Taggit 模型中添加了额外的字段)。请注意,根据此问题,您可能需要在 html 中加载 css 和 js 。我正在使用Django Crispy Forms。
在我的应用设置中:
TAGGIT_TAGS_FROM_STRING = "taggit_selectize.utils.parse_tags"
TAGGIT_STRING_FROM_TAGS = "taggit_selectize.utils.join_tags"
TAGGIT_SELECTIZE_THROUGH = "jobsboard.models.SkillTags"
TAGGIT_CASE_INSENSITIVE = True
TAGGIT_SELECTIZE = {
"MINIMUM_QUERY_LENGTH": 2,
"RECOMMENDATION_LIMIT": 10,
"CSS_FILENAMES": ("taggit_selectize/css/selectize.django.css",),
"JS_FILENAMES": ("taggit_selectize/js/selectize.js",),
"DIACRITICS": True,
"CREATE": False,
"PERSIST": True,
"OPEN_ON_FOCUS": True,
"HIDE_SELECTED": True,
"CLOSE_AFTER_SELECT": False,
"LOAD_THROTTLE": 300,
"PRELOAD": False,
"ADD_PRECEDENCE": False,
"SELECT_ON_TAB": False,
"REMOVE_BUTTON": True,
"RESTORE_ON_BACKSPACE": False,
"DRAG_DROP": False,
"DELIMITER": ",",
}
在我的工作板/models.py 中:
from taggit.models import TagBase, GenericTaggedItemBase
from taggit_selectize.managers import TaggableManager
class SkillTags(TagBase):
LANGUAGE = "la"
STATISTICS = "st"
CODING = "co"
DISCIPLINE = "di"
TYPES = (
(LANGUAGE, "language"),
(STATISTICS, "statistics"),
(CODING, "coding"),
(DISCIPLINE, "discipline"),
)
type = models.CharField(choices=TYPES, default=DISCIPLINE, max_length=2)
creator = models.ForeignKey(User, null=True)
class TaggedModel(GenericTaggedItemBase):
tag = models.ForeignKey(SkillTags, related_name="%(app_label)s_%(class)s_items")
class Job(TimeStampedModel):
tags = TaggableManager(_("skillset required"), blank=True, through=TaggedModel)
在我的网址中:
url(r'^hirer/new/$', NewJobView.as_view(), name='hirer_new_job')
在我的工作板/views.py 中:
class NewJobView(FormView):
template_name = 'jobsboard/new_edit_job.html'
form_class = NewAndEditJobForm
在我的工作板/forms.py 中:
class NewAndEditJobForm(ModelForm):
class Meta:
model = Job
fields = ('tags',)
对于我的工作板/模板/工作板/new_edit_job.html:
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
{{ block.super }}
{% crispy form %}
{% endblock content %}
对于我的模板/base.html:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
{% block css %}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<!-- Your stuff: Third-party CSS libraries go here -->
{% endblock %}
{% block extrahead %}
{% endblock %}
</head>
<body>
{% block content %}
{% endblock content %}
{% block javascript %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
{% endblock javascript %}
</body>
</html>
推荐阅读
- java - 在 Apache Beam 中读取 CSV 文件时跳过标题
- bash - 如何将文件名列表传递给命令
- c# - ZXing.Net.Mobile MobileBarcodeScanner 的 CustomOverlay
- r - R中数据框中的列对的马氏距离
- excel - 选择在 Col D 中具有特定数字的行
- python - 如果单元格值中不存在字符串,则添加到列表中,如果存在则中断并开始新列表?
- c# - 从 IIS 7.0 升级到 IIS 10
- uber-api - 获取 INVALID_REQUEST Uber API
- java - 如何捕捉弹簧集成套接字服务器中的错误?
- android - TimePickerDialogue Fragment kotlin 需要哪个 Fragment Manager