使用Bootstrap tagsinput插件在Django表单中形成错误

时间:2017-06-08 17:15:00

标签: html5 django-forms bootstrap-tags-input

我正在使用Bootstrap/Tagsinput在Django输入表单中添加标签。

问题

第一个字段是我想要添加标签的位置,第二个字段是一个简单的文本字段。我可以在第一个字段中添加标记,在第二个字段中添加普通文本。但是,当我提交表单时,输入值将被删除并返回到原始表单。 django form.errors表示第二个字段为空且带有This field is required消息,即使我输入了文本!我错过了什么?

enter image description here

form.errors

正在回归

<ul class="errorlist"><li>experiments<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

以下是相关文件

tags_add.html

我使用的是自定义HTML而不是django的forms.as_tablecss文件中添加了所有必需的min.jshtml

<form id="defaultForm" method="post" action="" class="form-horizontal">{% csrf_token %}
        <div class="form-group">
            <label class="col-lg-3 control-label">Tags:</label>
            <div class="col-lg-5">
                <input type="text" name="tags" id="aa" class="form-control" value="" data-role="tagsinput" />
            </div>
        </div>
        <div class="form-group">
            <label class="col-lg-3 control-label">Experiments:</label>
            <div class="col-lg-5">
                <input type="text" name="tags" id="exp_id" class="form-control" value="" />
            </div>
        </div>
        <div class="form-group">
            <div class="col-xs-5 col-xs-offset-3">
                <button type="submit" class="btn btn-default">Submit</button>
            </div>
        </div>
</form>

forms.py

class TagsForm(ModelForm):
    tags = forms.CharField( widget=forms.TextInput(attrs={'size':'20', 'placeholder':'add tags'}), required=True )
    experiments = forms.CharField( widget=forms.TextInput(attrs={'size':'20', 'placeholder':'expid'}), required=True )
    def __init__(self, *args, **kwargs):
        super(TagsForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Tags
        fields = '__all__'

views.py

def view_tags(request,formtype):
    form_type = formtype
    if request.method == "POST":
        form = form_type(request.POST or None)#, extra=extra_additives)
        if form.is_valid():
            instances = form.save(commit=False)
            temp_str= str(instances)
            print temp_str

            experiment_tags = temp_str
            return HttpResponse(experiment_tags)
        else:
            print "from view_tags {0}".format(form.errors)
            return HttpResponse(form.errors)
    else:
        form = TagsForm()
        return render(request, 'tags_add.html', {'form': form})

models.py

class Tags(models.Model):

    tags = models.CharField(max_length=1000)
    experiments = models.CharField(max_length=1000)

    def __str__(self):
        return ':'.join([self.tags, self.experiments])

1 个答案:

答案 0 :(得分:0)

我通过将以下内容添加到scripts文件中的html标记来实现它:

    $("input[name='tags']").tagsinput({
       confirmKeys:[13] //-- Only enter                                                                                   
     });