下面的例子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)
您将如何引发'create'方法的财产?我使用密码属性,设置密码字段和盐。 –
是的,我不想照顾手动创建UUID的:) –
如果您将属性传递给'create' - 您将收到错误'ValidationError:错误的列传递:set(['password'])'in目前的情况。 –