表格中的django DateTimeField(初始值)

时间:2017-03-17 14:30:20

标签: python django forms datetime

我对Django表单中的DateTimeField的初始值没什么问题。

我在forms.py中声明了

class FaultForm(forms.ModelForm):
    ...
    date_time = forms.DateTimeField(initial=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), required=False)
    ...

我在models.py中声明了

class Fault(models.Model):
    ...
    # date time
    date_time = models.DateTimeField(default=datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    ...

问题在于返回适当的时间。 当我使用来自forms.py的初始/默认日期时间向我的数据库添加一些对象时,我对每个对象都有完全相同的时间。

但是当我从模板中添加带有datetime的对象时,我对数据库中的每个对象都有很好的日期时间。

我必须告诉我的函数返回datetime在两种情况下是完全相同的,但也许问题是生成表单?我们有相同的时间,因为我们生成一次形式,或类似的东西??

我不知道该怎么做,因为我想使用表单中的初始值,而不必在模板中再次执行。

Ony的想法?错误?其他日期时间功能??解决这个小问题的其他方法??

请帮帮我:)。

3 个答案:

答案 0 :(得分:0)

您正在调用函数datetime.now().strftime("%Y-%m-%d %H:%M:%S")并指定default。因此,在运行时期间,now()将被评估并存储为默认值。因此,您可以在所有对象中看到相同的日期时间。您需要使用auto_now argument并将其设置为True

模型 -

class Fault(models.Model):
    ...
    date_time = models.DateTimeField(auto_now=True)
    ...

表格 -

class FaultForm(forms.ModelForm):
    ...
    date_time = forms.DateTimeField(initial=datetime.now(), required=False)
    ...

答案 1 :(得分:0)

Django模型字段在编译时得到评估。在上面的示例中,default值将评估

要将default参数修改为可调用的

,请将此简单点修复
def get_now():
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

class Fault(models.Model):
    date_time = models.DateTimeField(default=get_now)

答案 2 :(得分:0)

每次在为对象分配内存时,在FaultForm类中使用下面的Python方法进行初始化:

def __init__(self, *args, **kwargs):
    kwargs.update( initial = { 'date_time': datetime.now() } )
    super( FaultForm, self ).__init__( *args, **kwargs )

Explicit return in init