繁体   English   中英

可调用的Django模型属性值评估

[英]Django model attribute value evaluation in callable

为什么在这两个属性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。 如果我只使用可通话对象,

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的答案和https://docs.djangoproject.com/en/dev/ref/models/fields/#default将lambda包装在可调用项中结合使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM