Как удалить десятичное объявление MSSQL из списка QuerySet? - PullRequest
0 голосов
/ 08 марта 2019

У меня есть алгоритм сортировки, который упорядочивает список с родителями и их детьми. Вот рабочий пример: Обучающая программа Point Coding Ground .

Однако этот рабочий пример имеет предопределенный «очищенный» список. Однако единственное отличие этого предопределенного списка состоит в том, что я удалил «десятичные объявления» (или как они там называются) из списка. Вот пример как грязных, так и чистых списков.

Грязный список:

item_list = [
    {...},
    {'qmaQuoteAssemblyID': 0, 'qmaLevel': Decimal('1'), 'qmaParentAssemblyID': 0, 'qmaPartShortDescription': '12U x 600 x 650 Professional Rack', 'qmaPartID': 'RACK S9', 'qmaQuantityPerParent': Decimal('1.00000')},
    {...}]

Чистый список:

item_list = [
    {...},
    {'qmaQuoteAssemblyID': 0, 'qmaLevel': 1, 'qmaParentAssemblyID': 0, 'qmaPartShortDescription': '12U x 600 x 650 Professional Rack', 'qmaPartID': 'RACK S9', 'qmaQuantityPerParent': 1.00000},
    {...}]

Как вы можете видеть из обоих примеров, что грязный список имеет Decimal('somevalue'), окружающий его значение DecimalField. Однако с чистым списком он удалил его, что позволило ему без проблем пройти алгоритм.

Когда я запускаю грязный список 1023 * по алгоритму, я получаю эту ошибку:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'Decimal' is not defined

А в моем проекте Django список просто считается пустым.

Это имеет смысл, потому что десятичная дробь не определена. Но мой environemnt, похоже, рассматривает Decimal('somevalue') как метод / функцию вместо ее сырого десятичного значения. Я считаю, что этот «мусор» добавляется вокруг значения либо из моей базы данных MSSQL, либо из некоторых других программ MSSQL → Django, которые я запускаю параллельно с моим проектом Django.

В настоящее время я создаю список примерно так:

con1 = Q(qmaQuoteID=quote_id)
con2 = Q(qmaQuoteLineID=quote_line_id)
query = QuoteAssemblies.objects.filter(con1 & con2
                              ).order_by('qmaQuoteAssemblyID'
                              ).values('qmaQuoteAssemblyID', 'qmaParentAssemblyID', 'qmaLevel', 'qmaPartID', 'qmaPartShortDescription', 'qmaQuantityPerParent')
item_list = list(query)

Есть ли способ очистить список, чтобы удалить Decimal('somevalue') из значения, чтобы оно правильно проходило мой алгоритм?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Я обнаружил, что это лучший способ справиться с тем, что Decimal('X') извлекается как метод / функция. Я просто объявил Decimal как класс и убедился, что python рассматривает его только как значение, и, по сути, не обращая внимания на мусор вокруг него:

class Decimal:
    def __init__(self, value):
        self.value = value
        def value(self):
            print(self.value)
0 голосов
/ 08 марта 2019

, чтобы избежать

raceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: name 'Decimal' is not defined

просто

from decmal import Decimal


, если по-прежнему не получается и требуется преобразовать десятичное число в целое или строковое,

for item in item_list:
    item['qmaLevel'] = int(item['qmaLevel'])
    # item['qmaLevel'] = str(item['qmaLevel'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...