django - набор запросов с дополнительным методом возвращает пустое значение, count () говорит об обратном - PullRequest
4 голосов
/ 31 октября 2009

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

class PortfolioItemManager(models.Manager):

    use_for_related_fields = True

    def extended(self): 

       return self.extra(select = {'current_price':'current_price', 'current_value':'current_price*quantity', 'gain':'current_price*quantity - cost'},
                      tables = ['pm_core_contract', ],
                      where = ['pm_core_contract.id = pm_core_portfolioitem.contract_id', ]
               )

Вот результаты, которые меня озадачивают:

In [10]: PortfolioItem.objects.extended()
Out[10]: []
In [11]: PortfolioItem.objects.extended().count()
Out[11]: 402

Результат от count () правильный. Что мне здесь не хватает?

РЕДАКТИРОВАТЬ: Сгенерированный SQL является правильным и может быть выполнен непосредственно на БД.

EDIT2: Проблема связана с двумя последними аргументами выбора, которые содержат арифметические операции.

1 Ответ

1 голос
/ 01 ноября 2009

Мне кажется, я только что понял проблему. Спасибо, Алекс, чей комментарий вызвал идею:

Модель PortfolioItem имеет свойства current_value и current_gain, которые я пытался заменить вычисляемыми полями SQL. Моей ошибкой было назвать одно из полей выбора метода extra () current_value без удаления свойства, так как это привело к тому, что модель имела два поля с одинаковым именем. Когда я покончил с этим перекрытием, все стало хорошо. Урок усвоен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...