2016-03-08 2 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 Я думаю, это вызвано переопределением метода to_database в столбце UUID. Какие конфликты с базой 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' метода? Я использую свойство password, которое устанавливает поле passwd и соль. –

+0

И да, я не хочу заботиться о создании вручную UUID :) –

+0

Если вы передадите свойство 'create' - вы получите сообщение об ошибке' ValidationError: Неправильные столбцы переданы: set (['password']) 'in текущий случай. –