Javascript Django&;jQuery-如何使用TagSelectMultiple小部件
我正在尝试使用来自stackoverflow的用户与Django,我很迷茫 我的表格是: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
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');