2016-03-08 45 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目前的情況。 –