与python和peewee相同的默认值

时间:2017-09-07 06:28:11

标签: python python-3.x peewee

我打算用PeeWee做一个测试,我发现一个大问题。 示例:

from uuid import uuid4
import datetime as dt
import time
from peewee import *

dbfile = 'test.db'
db = SqliteDatabase(dbfile)

class BaseModel(Model):
    class Meta:
        database = db

class Example(BaseModel):
    uuid = CharField(default=str(uuid4()))
    date = DateTimeField(default=dt.datetime.now())

try:
    Example.create_table()
except:
    pass
e1 = Example.create()
time.sleep(1)
e2 = Example.create()
print(e1.uuid, e2.uuid) #Same uuid...
print(e1.date, e2.date) #Same date

在此代码中,uuid和date是相同的,这是不正常的。 为什么以及如何将此更改为每个新创建的不同值?

谢谢

1 个答案:

答案 0 :(得分:2)

问题在于如何定义uuid和date字段的默认值。在Example类定义时,在uuid默认声明中,您正在执行uuid4函数并将该值指定为默认值。对于dt.datetime.now也是如此;您也在执行它并将返回的时间指定为默认值。

以下更改解决了问题:

class Example(BaseModel):
    uuid = CharField(default=uuid4)
    date = DateTimeField(default=dt.datetime.now)