【问题标题】:Setting yesterday as initial date in a Django Form将昨天设置为 Django 表单中的初始日期
【发布时间】:2011-07-25 22:12:06
【问题描述】:

我想在 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()
    }

和昨天的函数:

def yesterday():
    yesterday = (datetime.date.today() - datetime.timedelta(1))
    return yesterday

但是当我查看表格时它只显示今天的日期

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    您可以在 ModelField 中设置初始值,尽管它会被称为 default。我假设您只想在表单上执行此操作,在这种情况下您需要以下内容:

    class BilagForm(forms.ModelForm):
        dato = forms.DateField(widget=SelectDateWidget(), initial=yesterday)
        class Meta:
            model = Bilag
    

    不要忘记yesterday 后面不能包含括号——只需传递可调用对象,否则yesterday() 将立即被评估而不是动态的(参见this section 的底部)。

    【讨论】:

    • 如果没有像yesterday() 这样的便利功能,我将如何在任何一天(例如前 23 天)执行此操作? datetime.date.today - datetime.timedelta(days=23) 抛出错误。
    【解决方案2】:

    我认为你在错误的地方定义了初始 (class Meta)。

    据我了解,它应该设置为您尝试为其设置初始值的字段的参数。

    查看文档:http://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.Field.initial

    另一种选择是在模型定义中使用该字段的 default 参数。 请参阅此主题以获得一些灵感:Django datetime issues (default=datetime.now())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多