为什么在upload
模型的这两个属性中,time
每次都会被评估
我添加了一个新实例,但string
根本没有变化? (inUnixTime
为我提供了unix时间内的当前日期时间)
class upload(models.Model):
#...
time = models.IntegerField(default=inUnixTime)
string = models.CharField(max_length=255, default=str(inUnixTime()))
#...
def inUnixTime(t=None):
if not t:
t = datetime.datetime.now()
return int(time.mktime(t.timetuple()))
PS。如果我只使用callable,那么
string = models.CharField(max_length=255, default=str(inUnixTime))
然后我得到对象的内存地址而不是字符串的unix时间。
提前谢谢!
答案 0 :(得分:3)
str(inUnixTime())
返回一个字符串,就像u'A string'
一样 - 它不是可调用的,因此它不会发生变化。当您使用inUnixTime
函数作为默认函数时,它是可调用的,因此每次都会调用它。
你可能想要的是:
def string_default():
return str(inUnixTime())
然后:
string = models.CharField(max_length=255, default=string_default)
答案 1 :(得分:-1)
答案是将@Greg的答案和https://docs.djangoproject.com/en/dev/ref/models/fields/#default包裹在一个可调用的lambda中。