Python 可调用的Django模型属性值求值

Python 可调用的Django模型属性值求值,python,django,django-models,Python,Django,Django Models,为什么在upload模型的这两个属性中,每次都要计算time 我添加了一个新实例,但是string根本没有改变?(inUnixTime以unix时间为单位提供当前日期时间) 注:如果我只使用callable,则执行 string = models.CharField(max_length=255, default=str(inUnixTime)) 然后我得到对象的内存地址,而不是作为字符串的unix时间 提前谢谢你 str(inUnixTime())返回一个字符串,就像u'a string'-

为什么在
upload
模型的这两个属性中,每次都要计算
time
我添加了一个新实例,但是
string
根本没有改变?(
inUnixTime
以unix时间为单位提供当前日期时间)

注:如果我只使用callable,则执行

string = models.CharField(max_length=255, default=str(inUnixTime))
然后我得到对象的内存地址,而不是作为字符串的unix时间

提前谢谢你

str(inUnixTime())
返回一个字符串,就像
u'a string'
-它不是可调用的,因此不会更改。当您使用
inUnixTime
函数作为默认值时,它是一个可调用函数,因此每次都会被调用

您可能想要的是:

def string_default():
    return str(inUnixTime())
然后:

string = models.CharField(max_length=255, default=string_default)

这个问题的答案是将@Greg的答案和lambda包装成一个callable。

谢谢!这很有效,你不知道我花了多少时间在这上面。。。非常感谢你。。。我还将给你一个向上的投票,不仅仅是接受……但是,我必须取消勾选我给你的接受,因为:这表示“……lambdas不能用于像default这样的字段选项,因为它们不能通过迁移序列化。”。啊,是的,你是对的。在1.7版引入django迁移时,情况发生了变化。我已经修改了我的答案。这个答案是在@Greg修改他的答案之前发布的,这就是为什么它指的是lambda。格雷格最初的回答使用了lambda。。如果你把它包装在一个可调用的文件中,它就会工作…所以我不明白为什么投票会被否决。。。
string = models.CharField(max_length=255, default=string_default)