Django, ошибка отложенного атрибута - PullRequest
0 голосов
/ 04 мая 2018

Я нахожусь в ListView с именем PortfolioView. Я пытаюсь восстановить все элементы, которые пользователь ввел в модель, которая называется «Перспектива». Для этого я пробую следующее:

def get_context_data(self, **kwargs):
    Prospect.objects.all().filter(owner__username=self.request.user)
    context = MakeGraphs(Prospect.psuccess, Prospect.hc_type)
    return super(PortfolioView, self).get_context_data(**context)

Однако, когда я запускаю функцию MakeGraphs, я получаю сообщение об ошибке, в котором говорится, что операция не может быть запущена для отложенного атрибута. Я не понимаю, почему он возвращается в качестве отложенного атрибута.

Предложения

Редактировать: Для ясности, вот примерное из того, что я делаю в функции MakeGraphs:

def MakeGraphs(psuccess, hctype):
    #This isn't what I am really doing, but this should give you a flavor for it...
    newoutput1 = []
    newoutput1 = []
    for i in range(len(psuccess)):
        newoutput1.append(psuccess[i]**2 + hctype[i])
        newoutput2.append(psuccess[i]***3 + hctype[i]**2)

    aaa = sum(newoutput1)
    bbb = sum(newoutput2)

    return {'aaa':aaa, 'bbb':bbb}

Итак, он принимает список для обеих переменных и возвращает одно значение для каждой из возвращаемых переменных.

Редактировать 2: Когда я использую запрос:

def get_context_data(self, *args, **kwargs):
    a = Prospect.objects.filter(owner=self.request.user).first()

Я получаю значения для первой записи, где владелец = пользователь, как и ожидалось. Тем не менее, я хотел бы получить все значения psuccess и hc_type ...

если я попробую это:

def get_context_data(self, *args, **kwargs):
    a = Prospect.objects.filter(owner=self.request.user)

Я получаю, что объект 'QuerySet' не имеет атрибута 'psuccess', ошибка ...

Редактировать 3: Для атрибутов, для которых возвращено одно значение, или если возвращено несколько атрибутов, и вы можете использовать их по одному вместо всех сразу, ответ, помеченный как решение, будет работать.

Однако, если вам нужны все значения для каждого атрибута в форме списка, вы должны использовать это для запроса: yourvar = list (MyModel.objects.filter (owner = self.request.user) .values_list ('yourvar'))

1 Ответ

0 голосов
/ 04 мая 2018

Вам нужно иметь Prospect экземпляр объекта. Атрибутами поля модели являются «Отложенные атрибуты».

т.е.

def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    prospect = Prospect.objects.filter(owner__username=self.request.user).first()
    if prospect:
        graphs = MakeGraphs(prospect.psuccess, prospect.hc_type)  # This should return a dict.
        context.update(graphs)
    return context
...