繁体   English   中英

在 Django 表格中将昨天设置为初始日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM