fix field name parsing when field contains double underscore #69

This commit is contained in:
Itai Shirav 2018-06-10 14:27:51 +03:00
parent 3cd3e1ec83
commit d7382e1ce2
2 changed files with 21 additions and 1 deletions

View File

@ -157,7 +157,11 @@ class FOV(object):
def __init__(self, field_name, operator, value):
self._field_name = field_name
self._operator = _operators[operator]
self._operator = _operators.get(operator)
if self._operator is None:
# The field name contains __ like my__field
self._field_name = field_name + '__' + operator
self._operator = _operators['eq']
self._value = value
def to_sql(self, model_cls):

View File

@ -334,6 +334,20 @@ class AggregateTestCase(TestCaseWithData):
print(qs.as_sql())
self.assertEquals(qs.count(), 1)
def test_double_underscore_field(self):
class Mdl(Model):
the__number = Int32Field()
the__next__number = Int32Field()
engine = Memory()
qs = Mdl.objects_in(self.database).filter(the__number=1)
self.assertEquals(qs.conditions_as_sql(), 'the__number = 1')
qs = Mdl.objects_in(self.database).filter(the__number__gt=1)
self.assertEquals(qs.conditions_as_sql(), 'the__number > 1')
qs = Mdl.objects_in(self.database).filter(the__next__number=1)
self.assertEquals(qs.conditions_as_sql(), 'the__next__number = 1')
qs = Mdl.objects_in(self.database).filter(the__next__number__gt=1)
self.assertEquals(qs.conditions_as_sql(), 'the__next__number > 1')
Color = Enum('Color', u'red blue green yellow brown white black')
@ -351,3 +365,5 @@ class SampleModel(Model):
class Numbers(Model):
number = UInt64Field()