diff --git a/cqlengine/query.py b/cqlengine/query.py index e6cccc9f..a62b172d 100644 --- a/cqlengine/query.py +++ b/cqlengine/query.py @@ -417,7 +417,9 @@ class QuerySet(object): #get defined fields and their column names for name, col in self.model._columns.items(): - value_pairs += [(col.db_field_name, values.get(name))] + val = values.get(name) + if val is None: continue + value_pairs += [(col.db_field_name, val)] #construct query string field_names = zip(*value_pairs)[0] @@ -435,14 +437,13 @@ class QuerySet(object): #TODO: delete deleted / nulled columns deleted = [k for k,v in instance._values.items() if v.deleted] if deleted: - import ipdb; ipdb.set_trace() del_fields = [self.model._columns[f] for f in deleted] del_fields = [f.db_field_name for f in del_fields if not f.primary_key] pks = self.model._primary_keys qs = ['DELETE {}'.format(', '.join(del_fields))] qs += ['FROM {}'.format(self.column_family_name)] qs += ['WHERE'] - eq = lambda col: '{0} = :{0}'.format(v.db_field_name) + eq = lambda col: '{0} = :{0}'.format(v.column.db_field_name) qs += [' AND '.join([eq(f) for f in pks.values()])] qs = ' '.join(qs) diff --git a/cqlengine/tests/model/test_model_io.py b/cqlengine/tests/model/test_model_io.py index 09a72809..f408e46c 100644 --- a/cqlengine/tests/model/test_model_io.py +++ b/cqlengine/tests/model/test_model_io.py @@ -9,7 +9,7 @@ from cqlengine import columns class TestModel(Model): count = columns.Integer() - text = columns.Text() + text = columns.Text(required=False) class TestModelIO(BaseCassEngTestCase): @@ -57,4 +57,12 @@ class TestModelIO(BaseCassEngTestCase): def test_column_deleting_works_properly(self): """ """ + tm = TestModel.objects.create(count=8, text='123456789') + tm.text = None + tm.save() + + tm2 = TestModel.objects(id=tm.pk).first() + assert tm2.text is None + assert tm2._values['text'].initial_value is None +