Javascript Django&;jQuery-如何使用TagSelectMultiple小部件

Javascript Django&;jQuery-如何使用TagSelectMultiple小部件,javascript,jquery,django,django-forms,django-widget,Javascript,Jquery,Django,Django Forms,Django Widget,我正在尝试使用来自stackoverflow的用户与Django,我很迷茫 我的表格是: class CreationForm(forms.Form): tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(),widget=TagSelectMultiple(attrs={ 'style': 'width:400px', 'id': 'tags' })) TagSelectMultiple小部件具有以下代码: f

我正在尝试使用来自stackoverflow的用户与Django,我很迷茫

我的表格是:

class CreationForm(forms.Form):
    tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(),widget=TagSelectMultiple(attrs={ 'style': 'width:400px', 'id': 'tags' }))
TagSelectMultiple小部件具有以下代码:

from django import forms
from django.forms.util import flatatt
from django.utils.encoding import force_unicode
from django.utils.html import escape, conditional_escape
from django.utils.safestring import mark_safe

class TagSelectMultiple(forms.SelectMultiple):
    def render(self, name, value, attrs=None, choices=()):
        if value is None: value = []
        final_attrs = self.build_attrs(attrs, name=name)
        self.name = name
        output = [u'<div class="tagSelector" multiple="multiple"%s>' % flatatt(final_attrs)]
        options = self.render_options(choices, value)
        if options:
            output.append(options)
        output.append('<input type=text>')
        output.append('</div>')
        return mark_safe(u'\n'.join(output))

    def render_option(self, selected_choices, option_value, option_label):
        if unicode(option_value) in selected_choices:
            return u'<span class="tag">%s <a>x</a><input name="%s" type="hidden" value="%s"/></span>' % (
                conditional_escape(force_unicode(option_label)), escape(self.name), escape(option_value))
        return ''
在我的模板中,我包含了所有需要的javascript文件:

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/themes/base/jquery-ui.css" rel=stylesheet type="text/css">
<link href='{% static "jquery-tagselector.css" %}' rel=stylesheet>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<script type='text/javascript' src='{% static "jquery-tagselector.js" %}'></script>
修改后:

tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(),
        widget=TagSelectMultiple(attrs={ 'style': 'width:300px' }))
tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(),
        widget=TagSelectMultiple(attrs={ 'style': 'width:400px', 'id': 'tags' }))
第一个问题:我不知道是否需要添加以下脚本,因为我已经在
queryset
属性表单字段中给出了我的标记列表

$('#tags').tagSelector(tags, 'tags');
第二个问题:在我的自动完成框中键入内容时,尽管有大量的
标记
对象,但我绝对没有选择。是因为我的标签型号吗?不要解释他的
标签
模型的架构,我很难猜出这个。或者可能是因为小部件代码中没有
self.choices

链接:
javascript文件

我不确定这是否能帮助您,但当我需要一个
多回音字段
时,我更喜欢使用库
select2
来获取javascript。使用自动完成和多字段配置
select2
,这太容易了。他们在这里有非常好的文档和示例:@Liarez您的链接非常有趣!我要去看看这个很棒的图书馆。
$('#tags').tagSelector(tags, 'tags');