[英]Setting yesterday as initial date in a Django Form
我想在 django 表格中将初始日期设置为昨天,我的代码在这里:
class Bilag(models.Model):
dato = models.DateField()
tekst = models.CharField(max_length=100)
konto = models.CharField(max_length=10)
avd = models.CharField(max_length=10, null=True,blank=True)
avdnavn = models.CharField(max_length=30, null=True,blank=True)
kasseid = models.CharField(max_length=10)
belop = models.FloatField()
def __unicode__(self):
return self.tekst
class BilagForm(ModelForm):
class Meta:
model = Bilag
widgets = {
'dato': SelectDateWidget()
}
initial = {
'dato': yesterday()
}
和昨天的 function:
def yesterday():
yesterday = (datetime.date.today() - datetime.timedelta(1))
return yesterday
但是当我查看表格时它只显示今天的日期
您可以在ModelField中设置初始值,但它会被称为default
。 我假设您只想在表单上执行此操作,在这种情况下您需要以下内容:
class BilagForm(forms.ModelForm):
dato = forms.DateField(widget=SelectDateWidget(), initial=yesterday)
class Meta:
model = Bilag
不要忘记yesterday
之后你不能包含括号 - 只需传递callable,否则将立即评估yesterday()
并且不是动态的(参见本节底部)。
我认为你在错误的地方定义了首字母( class Meta
)。
根据我的理解,它应该被设置为您尝试设置初始值的字段的参数。
查看文档: http : //docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.Field.initial
另一种选择是在模型定义中使用字段的default
参数。 请参阅此主题以获得一些灵感: Django日期时间问题(默认= datetime.now())
我已经尝试了所有建议的解决方案,但没有一个有效。 唯一对我有用的是使用 JavaScript (J Query) 设置日期
{% block js %}
{{block.super}}
<script>
Date.prototype.addDays = function (days) {
let date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
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 get_date(dd=0) {
let now = new Date();
return date_2_string(now.addDays(dd))
}
$("#dato").val(get_date(-1));
</script>
{% endblock js %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.