在django中提交表单时更改日期字段值

时间:2015-02-12 11:36:05

标签: javascript jquery django forms

我有一张表格

forms.py

class RegistrationForm(BaseRegistrationForm):
    name = forms.CharField(label='Name of the Entrepreneur', max_length=120)
    ename = forms.CharField(label='Name of the Enterprise', max_length=120)
    sector = forms.CharField(label='Industry Sector', max_length=50, widget=forms.Select(choices=zip(SECTOR_CHOICES, SECTOR_CHOICES)))
    subsector = forms.CharField(label='Sub-sector', max_length=50, widget=forms.Select(choices=zip(SUBSECTOR_CHOICES, SUBSECTOR_CHOICES)))
    address1 = forms.CharField(label='Address Line 1', max_length=100)
    address2 = forms.CharField(label='Address Line 2', max_length=100, required=False)
    city = forms.CharField(label='City/Town', max_length=50)
    state = forms.CharField(label='State', max_length=50)
    country = forms.CharField(label='Country', max_length=50)
    postal_code = forms.CharField(label='Pin Code', max_length=10, required=False)
    estd = forms.DateField(label='Establishment Details')
    contact = forms.IntegerField(label='Contact Number')

对于我写过javascript的DateField变量

JavaScript代码:

<script type="text/javascript">
$(function() {
    $('#id_estd').datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'mm/yy',
        onClose: function(dateText, inst) { 
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
    });
});
</script>
<style>
.ui-datepicker-calendar {
    display: none;
    }
</style>

estd字段中显示mm / yy(例如:02/2014)

提交表单时,我应该提交mm / dd / yy之类的值。那么如何在提交表单时更改值?

3 个答案:

答案 0 :(得分:0)

最好为人类使用一种格式,为处理使用另一种格式。 JQuery UI Datepicker允许使用不同的格式填充备用字段:http://jqueryui.com/datepicker/#alt-field

基本上重命名现有的datepicker字段,添加名为estd的隐藏输入,其ID为id_estd(Django将分配的默认名称和ID),并在初始化datepicker时添加以下行:

altField: "#id_estd",
altFormat: "mm/dd/yy"

答案 1 :(得分:0)

为什么要使用javascript来更改值?只需在django中设置格式。

class MyForm(Form):  

    # the default format is %Y-%m-%d  
    estd = forms.DateField(  
        widget=forms.widgets.DateInput(format="%m/%Y")
    ) 

DateInput小部件的文档; https://docs.djangoproject.com/en/1.7/ref/forms/widgets/#dateinput

日期/时间输入格式设置在此处详述; https://docs.djangoproject.com/en/1.7/ref/settings/#date-input-formats

答案 2 :(得分:0)

不得使用javascript或其他内容。 django中有一个片段使用它。

https://djangosnippets.org/snippets/1688/

将代码段保存在名为widgets.py的文件中,然后在forms.py文件中导入类名,并按照以下代码进行操作:

import datetime
class myForm(forms.Form):
    # ...
    date = forms.DateField(
        required=False,
        widget=MonthYearWidget(years=xrange(1990,datetime.date.today().year+1))
    )

希望它有效。