我对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的想法?错误?其他日期时间功能??解决这个小问题的其他方法??
请帮帮我:)。
答案 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 )