比较日期并验证] 在 django
Posted
技术标签:
【中文标题】比较日期并验证] 在 django【英文标题】:compare dates and validate] in django 【发布时间】:2013-06-18 19:45:56 【问题描述】:forms.py
class SearchFilterForm(Form):
fromdate = forms.CharField(widget=forms.TextInput(attrs='placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'))
todate = forms.CharField(widget=forms.TextInput(attrs='placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'))
function comparedate()
var fromdate = document.getElementById("id_fromdate").value;
var todate = document.getElementById("id_todate").value;
if(fromdate<todate)
$("#error-warning").show();
$("#error-warning").text("Please correct the To date");
return false;
模板.html
<button type="submit" name="filter" onclick="comparedate()">Go <img src="/static/images/button-icon-ir-fwd.png" ></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
此代码用于验证起始日期和截止日期。验证正在进行,但在验证后表单再次提交。这用于搜索报告功能,因此如果输入的截止日期小于起始日期,则会显示错误消息,它去搜索,这不应该发生。
谁能告诉我会是什么问题
【问题讨论】:
如果您将 onclick 放在提交上,则提交可能发生在验证发生之前或之后(也取决于页面是否正在导航)尝试在您的日期字段上使用 api.jquery.com/change 并使用 @ 比较日期987654322@ 这样您就可以在值更改时立即比较日期,而无需等待用户单击按钮 【参考方案1】:这个问题我们有不同的解决方案,你可以试试
<button type="submit" name="filter" onclick="javascript:return comparedate();"> Go<img src="/static/images/button-icon-ir-fwd.png" ></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
【讨论】:
【参考方案2】:你试过吗? https://docs.djangoproject.com/en/dev/ref/validators/
如果您想对多个字段进行验证,您可以在表单的 clean 方法中执行此操作,因此在您的搜索表单中您将拥有:
class SearchFilterForm(Form):
def clean(self):
if self.fromdate < self.todate:
raise ValidationError('Please correct the To date')
return self.cleaned_data
那么在您看来,您将拥有:
if form.is_valid():
...
您可以在模板中使用:
form.non_field_errors
或者,您可以手动设置字段错误,而不是引发 ValidationError:
self._errors['todate'] = 'Please correct this'
在模板中你可以使用:
form.todate.errors
【讨论】:
按照相同的过程得到错误“'SearchFilterForm'对象没有属性'fromdate'” 啊抱歉,应该是 self.cleaned_data['fromdate'] 我相信 看看我尝试了什么 def clean(self): fromdate=self.cleaned_data['fromdate'] todate=self.cleaned_data['todate'] if fromdate 您是否在视图中的任何位置使用 from.is_vaild()? 是的,我正在使用 searchform.is_valid():在 views.py 中【参考方案3】:document.getElementById("button_id").disabled = true
$("id_todate").change(function()
var fromdate = document.getElementById("id_fromdate").value;
var todate = document.getElementById("id_todate").value;
if (Date.parse(fromdate) > Date.parse(todate))
$("#error-warning").hide();
document.getElementById("button_id").disabled=false;
else
$("#error-warning").show();
$("#error-warning").text("Please correct the To date");
<button type="submit" name="filter" id="button_id" disabled>Go <img src="/static/images/button-icon-ir-fwd.png" ></button>
<div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
修改:
<html>
<script type="text/javascript" src="jquery-1.10.1.min.js" ></script>
<input type="date" id="id_fromdate" />
<input type="date" id="id_todate" />
<input type="submit" name="filter" id="button_id" disabled />
<div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
<script type="text/javascript">
$("input[type='date']").change(function()
var fromdate = document.getElementById("id_fromdate").value;
var todate = document.getElementById("id_todate").value;
if (Date.parse(fromdate) > Date.parse(todate))
//console.log(fromdate)
//console.log(todate)
$("#error-warning").hide();
document.getElementById("button_id").disabled=false;
else
//console.log(fromdate)
//console.log(todate)
document.getElementById("button_id").disabled=true;
$("#error-warning").show();
$("#error-warning").text("Please correct the To date");
)
</script>
【讨论】:
我检查了你的答案,验证不起作用,按钮单击没有发生,在控制台中我收到此错误“未捕获的类型错误:无法设置属性‘禁用’为空” 嗨,请检查我修改后的代码以及 html。我认为它现在可以工作了。您可能需要根据您的 html 代码修改代码.. 我已经在使用带有日期字段的日期选择器,在 html 中您再次初始化了日期字段的字段,我尝试了相同的代码,提交按钮 onclick 没有发生。控制台中没有错误我没有不知道它是否在 html 文件中工作,因为我使用 django 框架直接在我的应用程序中应用了答案。将检查其他 html 页面恢复您。以上是关于比较日期并验证] 在 django的主要内容,如果未能解决你的问题,请参考以下文章