2016-03-08 48 views
1

下面的例子python cassandra driver卡桑德拉。默认列值

class Users(Model): 
    username = columns.Text(index=True, required=True) 
    user_id = columns.UUID(index=True, default=uuid.uuid4) 
    email = columns.Text(primary_key=True, required=True) 
    passwd = columns.Text() 
    salt = columns.Text() 

而在下面的方式创建对象:

u = Users() 
u.username = 'admin' 
u.email = '[email protected]' 
u.password = u'test' #This is property with setter 
Users.create(**dict(u)) 

在这种情况下,我们得到user_id:None而不是user_id:uuid.uuid4和相应的误差。

如何使default = uuid.uuid4以较少的痛苦工作?

UPD我想,这是由UUID列中覆盖to_database方法引起的。与基地to_database方法冲突。

UPD2看起来像不好的情况。错误的一步发生**dict(u)

解决方案:

d = dict(u) 
del d['column_with_default_value'] 
Users.create(**d) 

回答

2

你做更多的工作比你需要。鉴于你的表,你这是怎么插入:

Users.create(username="admin", email="[email protected]", passwd="test")

我已经验证了这一点的位置:

In [16]: Users.create(username="admin", email="[email protected]", passwd="test") Out[16]: Users(username='admin', user_id=UUID('183d542d-c469-448d-9d14-d3614f727cef'), email='[email protected]', passwd='test', salt=None)

+0

您将如何引发'create'方法的财产?我使用密码属性,设置密码字段和盐。 –

+0

是的,我不想照顾手动创建UUID的:) –

+0

如果您将属性传递给'create' - 您将收到错误'ValidationError:错误的列传递:set(['password'])'in目前的情况。 –