我有以下代码来设置 DateField 和 CharField 的初始值。 CharField 的初始值已正确设置,但 DateField 的初始值仍然为空。
class MyForm(forms.ModelForm):
dummy = fiscal_year_end = forms.CharField()
date = forms.DateField()
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
today = datetime.date.today()
new_date = datetime.date(year=today.year-1, month=today.month, day=today.day)
self.fields["date"].initial = new_date
self.fields["dummy"].initial = 'abc'
您可以在创建日期字段的同一行中设置默认值:
date = forms.DateField(initial=datetime.date.today)
或者,如果您想传递特定日期,您可以创建一个函数并将其传递给 DateField,如下所示:
def my_date():
return datetime.date(year=today.year-1, month=today.month, day=today.day)
class MyForm(forms.ModelForm):
#...
date = forms.DateField(initial=my_date)
#...
此外,您可以查看docs以获得更多帮助;)
我不确定这是否回答了(不是100%清楚)最初的问题,但我来到这里,所以这是我的解决方案。
日期字段的 HTML
value
属性包含日期,但其格式取决于语言,并且从来不是预期的格式。强制日期为 ISO 格式就可以了:
class MyForm(forms.ModelForm):
my_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.initial['my_date'] = self.instance.my_date.isoformat() # Here
老问题,但当您使用简单的日期时间对象时它会起作用。例如。
tomorrow = datetime.today() + timedelta(days=1)
send_at_date = forms.DateField(
required=True,
initial=tomorrow,
widget=DateInput(attrs={"type": "date"}),
)
希望这对其他人有帮助。
我发现无论语言环境如何,它都可以工作的一种方法是定义一个函数,通过强制预期的格式返回日期。
import datetime
def today_ymd():
"""Return today in format YYYY-MM-DD"""
return datetime.date.today().strftime('%Y-%m-%d')
然后将该函数的引用传递给初始参数(不带括号的函数名称)。
class MyForm(forms.Form):
my_date = forms.DateField(
initial=today_ymd,
widget=forms.DateInput(attrs={'type': 'date'}),
)
我已经尝试了所有建议的解决方案,但没有一个有效。唯一对我有用的是使用 JavaScript 设置日期。
{% block js %}
{{block.super}}
<script>
function date_2_string(dt) {
let day = ("0" + dt.getDate()).slice(-2);
let month = ("0" + (dt.getMonth() + 1)).slice(-2);
let today = dt.getFullYear()+"-"+(month)+"-"+(day);
return today
}
function current_date() {
let now = new Date();
return date_2_string(now)
}
$("#date").val(current_date());
</script>
{% endblock js %}
这个代码适用于我的情况
设置init方法!
覆盖您要更改属性的表单
并设置需要更改的初始值
def __init__(self, *args, **kwargs):
super(AssignedModelForm, self).__init__(*args, **kwargs)
self.initial['finished_date'] = timezone.now() # Here