python - Django ORM magic. Bug or a feature? -


data = self.get_queryset()\             .annotate(total=func(sum('money_field'), value('char'), function="convert"))\             .filter(date__lt=end, date__gte=start) 

if execute data.query - works fine, data.all() raise mysql error.

reason of magic django func(), when try pass constant param (without brackets) -- threre 1 way it: using django value().

it works fine, when query throught data.query, when execute -- mysql add additional quotes,

working wariant is:

data = self.get_queryset()\             .annotate(total=func(sum('money_field'), value('char'), function="convert"))\             .filter(date__lt=end, date__gte=start)  cursor = connection.cursor() cursor.execute(str(data.query).replace('%', '%%'), []) data_list = cursor.fetchall() 

anyone can wtf ?

upd 2: printing query of queryset looks like:

select `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`,  convert(sum(`blankapp_modela`.`decimal_field`), char) `total`  `blankapp_modela` group `blankapp_modela`.`id` order null 

looking deeper in mysql cursor found next:

select `blankapp_modela`.`id`, `blankapp_modela`.`decimal_field`,  convert(sum(`blankapp_modela`.`decimal_field`), 'char') `total`  `blankapp_modela` group `blankapp_modela`.`id` order null limit 21 

char wrapped quotes, not right. don't know right solution now. not django issue, mysqldb behavior.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -