使用DateField的表单:如何检查has_changed()

时间:2016-09-26 11:19:04

标签: django django-forms

Django 1.10。

尝试学习表格。

The problem is that I can't manage to make form.has_changed() become a False.

即form.has_changed()始终为True。怀疑原因是在DateField中。因为pub_date = forms.CharField()给出了预期的False结果。

文档:this

你可以在这里给我一个动作:

  

1)是因为DateField吗?
  2)如果是这样,为什么会这样?该   在我看来,实验中产生的形式是相同的。 3)   3)如何应对?

代码:

class PubDateForm(forms.Form):  
    pub_date = forms.DateField() 

pub_date_data = {'pub_date': '2015-01-01'}



form = PubDateForm(
                        pub_date_data, 
                        initial=pub_date_data
                       )
has_changed = form.has_changed()

实验:

pub_date_data = {'pub_date': '2015-01-01'}
form = PubDateForm(pub_date_data
#                , initial=pub_date_data
                       )
has_changed = form.has_changed()

PubDateForm: <tr><th><label for="id_pub_date">Pub date:</label></th><td><input id="id_pub_date" name="pub_date" type="text" value="2015-01-01" required /></td></tr>


pub_date_data = {'pub_date': '2015-01-01'}
form = PubDateForm(
# pub_date_data, 
                        initial=pub_date_data
                       )

PubDateForm: <tr><th><label for="id_pub_date">Pub date:</label></th><td><input id="id_pub_date" name="pub_date" type="text" value="2015-01-01" required /></td></tr>

1 个答案:

答案 0 :(得分:0)

在初始数据中使用date对象而不是字符串

 pub_date_data = {'pub_date': date(2015, 1, 1)}

请注意,重要的是initial值是日期。如果您将表单数据提供为字符串,如下例所示,那么form.has_changed()将返回False

form = PubDateForm(data={'pub_date': '2015-01-01'},
                   initial={'pub_date': date(2015, 1, 1)}
                   )