Невозможно отобразить новый добавленный атрибут в шаблоне из объекта в наборе запросов в UpdateView (Django) - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь вывести список дополнительных объектов модели, на которые влияет этот основной объект. Основная модель не влияет на дополнительную, поэтому я пытаюсь добавить список в новый атрибут объекта. Когда я печатаю .__dict__ объекта после добавления нового атрибута, все в порядке, но шаблон выводит пустое. Как мне это исправить?

Мой код в UpdateView:

def get_queryset(self):
    print('ID: ', self.kwargs['adapter_account_id'])
    deals = Deal.objects.filter(adapter_account=self.kwargs['adapter_account_id'])
    adapter_acc = AdapterAccount.objects.filter(id=self.kwargs['adapter_account_id'])
    for obj in adapter_acc:
        obj.deals = deals
    print(adapter_acc[0].__dict__)
    return adapter_acc

Вывод для .__dict__:

{'_state': <django.db.models.base.ModelState object at 0x7fa0590547c0>, 'id': 13,
'adapter_id': 9, 
'params': {'secret': 'secret', 'pay_gate': 'VV', 'product_id': '10731', 'merchant_id': '1998'}, 
'deals':<QuerySet [<Deal:#28>, <Deal:#30>]>}

Моя попытка отобразить значение в шаблоне:

{{ adapteraccount.deals}}

Например, {{ adapteraccount.params}} работает нормально.

UPD: obj.save() в l oop не имеет никакого эффекта.

QuerySet.update(deals=deals) не работает, поскольку модель не содержит этого поля.

1 Ответ

0 голосов
/ 23 апреля 2020

Я попытался добавить атрибут, который не включен в модель, даже обычную строку, и ничего не получалось. Поэтому я решил go по-другому и изменил render_to_response:

  def render_to_response(self, context, **response_kwargs):
    """
    Return a response, using the `response_class` for this view, with a
    template rendered with the given context.
    Pass response_kwargs to the constructor of the response class.
    """
    deals = Deal.objects.filter(adapter_account=self.kwargs['adapter_account_id'])
    context['deals'] = deals
    response_kwargs.setdefault('content_type', self.content_type)
    return self.response_class(
        request=self.request,
        template=self.get_template_names(),
        context=context,
        using=self.template_engine,
        **response_kwargs
    )
...