使用 Bootstrap tagsinput 插件的 Django 表单中的表单错误
Form error in a Django form with Bootstrap tagsinput plugin
我正在使用 Bootstrap/Tagsinput 在 Django 输入表单中添加标签。
问题
第一个字段是我要添加标签的地方,第二个字段是一个简单的文本字段。我可以在第一个字段中添加标签,在第二个字段中添加普通文本。但是,当我提交表单时,输入值被删除并返回到原始表单。 django form.errors
指示第二个字段为空并显示 This field is required
消息,即使我输入了文本!我错过了什么?
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_table
。所有必需的 css
和 min.js
已添加到 html
文件中。
<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])
我通过将以下内容添加到 html
文件中的 scripts
标记使其工作:
$("input[name='tags']").tagsinput({
confirmKeys:[13] //-- Only enter
});
我正在使用 Bootstrap/Tagsinput 在 Django 输入表单中添加标签。
问题
第一个字段是我要添加标签的地方,第二个字段是一个简单的文本字段。我可以在第一个字段中添加标签,在第二个字段中添加普通文本。但是,当我提交表单时,输入值被删除并返回到原始表单。 django form.errors
指示第二个字段为空并显示 This field is required
消息,即使我输入了文本!我错过了什么?
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_table
。所有必需的 css
和 min.js
已添加到 html
文件中。
<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])
我通过将以下内容添加到 html
文件中的 scripts
标记使其工作:
$("input[name='tags']").tagsinput({
confirmKeys:[13] //-- Only enter
});