2013-12-19 2 views
1

У меня есть модель Django WalletJournal, которая имеет ряд полей, десятичные значения, и определение примера класса модели выглядит следующим образом:Джанго Object Получить десятичный Match

balance = models.DecimalField(max_digits=20,decimal_places=2) 

Соответствующий столбец MySQL определяются как:

`balance` decimal(20,2) NOT NULL, 

И при извлечении строки по ее идентификатору и возврате баланса оно выглядит правильно.

>>> WalletJournal.objects.get(id=855).balance 
Decimal('1295599062.45') 
>>> 

Я пытаюсь использовать get_or_create для добавления записей и сохранить дубликаты до минимума, но я вижу некоторые очень Штанге поведение на ладить знаков после запятой. Пытаясь соответствовать вид любой строки или десятичная не возвращает результаты:

>>> WalletJournal.objects.get(balance='1295599062.45') 
DoesNotExist: WalletJournal matching query does not exist. 
>>> WalletJournal.objects.get(balance=Decimal(str('1295599062.45'))) 
DoesNotExist: WalletJournal matching query does not exist. 

Но если я матч с помощью __iexact я получаю правильный результат:

>>> WalletJournal.objects.get(balance__iexact='1295599062.45') 
<WalletJournal: joeb - 1XXXX00 - Acyclic Tau(9XXXX307) - Repair Bill(2013-11-30 15:55:01)> 

Я не верю, что __iexact не является идеальным решением, если кто-то может предположить, что я делаю неправильно, что было бы очень полезно.

В настоящее время я запускаю Django 1.6 и Python 2.6.5. MySQL версия сервера: 5.1.72-0ubuntu0.10.04.1 (Ubuntu)

Использование connection.queries Я вижу следующие запросы результатов от различного получить заявления:

__iexact  --> `balance` LIKE '1295599062.45' : Matches 
__exact  --> `balance` = '1295599062.45' : No Match 
str   --> `balance` = '1295599062.45' : No Match 
Decimal(str( --> `balance` = '1295599062.45' : No Match 
Raw SQL  --> `balance` = 1295599062.45  : Matches 

ли я делаю что-то не так с сравнением ?

+0

Какую базу данных вы используете? –

+0

MySQL Версия сервера: 5.1.72-0ubuntu0.10.04.1 – ModulusJoe

+0

Изменились ли значения max_digits и decimal_places? Кроме того, что такое значение sql_mode? Я просматривал http://dev.mysql.com/doc/refman/5.1/en/precision-math-expressions.html, чтобы увидеть, будет ли что-то фанки, но я не вижу условий, при которых это произойдет еще , –

ответ

0

Это выглядит как ошибка в обработке запросов mysql. Я сейчас проверил это успешно в Server version: 5.5.34-0ubuntu0.12.04.1 (Ubuntu) и запрос

WalletJournal.objects.get(balance='1295599062.45') 

теперь возвращает результаты, как ожидается, с запросом выполняется имеющий следующую команду, где оператор:

`balance` = '1295599062.45' 
Смежные вопросы