将昨天设置为Django表单中的初始日期

Kra*_*sen 5 python forms django

我想在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()
    }
Run Code Online (Sandbox Code Playgroud)

和昨天的功能:

def yesterday():
    yesterday = (datetime.date.today() - datetime.timedelta(1))
    return yesterday
Run Code Online (Sandbox Code Playgroud)

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

DrM*_*ers 7

您可以在ModelField中设置初始值,但随后会调用它default.我假设您只想在表单上执行此操作,在这种情况下您需要以下内容:

class BilagForm(forms.ModelForm):
    dato = forms.DateField(widget=SelectDateWidget(), initial=yesterday)
    class Meta:
        model = Bilag
Run Code Online (Sandbox Code Playgroud)

不要忘记你不能在括号后包括括号yesterday- 只是传递可调用的,否则yesterday()将立即进行评估而不是动态(参见本节底部).