Как исправить ошибочный поиск ключа при разрешении метода доступа в проекте django - PullRequest
0 голосов
/ 03 марта 2020

Я изменил на python 3.5.2. Я использую django_tables2 и сталкиваюсь с проблемой Failed lookup for key [wholesale_product] in {'wholesale_product__code': '11500356', 'quantity': Decimal('1.00'), 'wholesale_product__description': 'ΜΕΤΡΟΤΑΙΝΙΑ IRWIN 5M SHORT', 'wholesale_product__id': 76970}, when resolving the accessor wholesale_product__id

Проблема связана с полем оптового продукта, которое является FK для моей модели Warehouse_Order_Backorder.

моя модель

class Warehouse_Order_Backorder(models.Model):
    woo_order = models.ForeignKey(Woo_Orders,verbose_name="Παραγγελία Χοντρικής",null=True,on_delete=models.CASCADE)
    wholesale_product=models.ForeignKey(Product,null=True,on_delete=models.CASCADE)
    warehouse=models.ForeignKey(Warehouse,verbose_name=u'Αποθήκη',blank=True, null=True,on_delete=models.CASCADE)
    quantity = models.DecimalField("Ποσότητα", max_digits=7, decimal_places=2, default=0)
    date = models.DateTimeField("Ημ/νία",null=True, blank=True, default=datetime.datetime.now)



    def __str__(self):
        return self.woo_order.oid+" "+self.wholesale_product.description

мой стол

class BackOrderTable(tables.Table):

    #description
    wholesale_product_name = tables.Column(accessor='wholesale_product__description',verbose_name= 'Προϊόν που έχει backorder')
    #sku
    wholesale_product_code = tables.Column(accessor='wholesale_product__code',verbose_name= 'Sku Προϊόντος')
    #product_id
    wholesale_product_id = tables.Column(accessor='wholesale_product__id',verbose_name= 'ID Προϊόντος')
    #details button
    details=tables.LinkColumn('backorder_details_list',args=[A('wholesale_product__id')],accessor='Backorder Details',orderable=False,empty_values=(),verbose_name = 'Λεπτομέρειες backorder')



    class Meta:
        #define the model
        model = Warehouse_Order_Backorder
        template_name = 'django_tables2/bootstrap4.html'
        exclude = ('id','date',"warehouse","woo_order",'wholesale_product')
        sequence = ('wholesale_product_name','wholesale_product_code', 'wholesale_product_id',"quantity",'details')


    def render_wholesale_product_id(self,record):
        return '%s' % (record.wholesale_product.id)


    def render_wholesale_product_name(self,record):
        return '%s' % (record.wholesale_product.description)


    def render_wholesale_product_code(self,record):
        return '%s' % (record.wholesale_product.code)

    def render_details(self,record):
        return format_html('<a href="/backorder_details/{}/"><button class="btn btn-primary btn-sm" type="">Details</button></a>',record['wholesale_product__id'])

вот мой Traceback

Environment:


Request Method: GET
Request URL: http://backorders/

Django Version: 2.2.6
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'intranet',
 'crispy_forms',
 'fm',
 'dal',
 'dal_select2',
 'django_crontab',
 'django_tables2',
 'django_filters',
 'widget_tweaks',
 'django_smtp_ssl',
 'mathfilters',
 'bootstrap4',
 'bootstrap3',
 'django.contrib.humanize']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /usr/local/lib/python3.5/dist-packages/django_tables2/templates/django_tables2/bootstrap4.html, error at line 29
   Failed lookup for key [wholesale_product] in {'wholesale_product__code': '11500356', 'quantity': Decimal('1.00'), 'wholesale_product__description': 'ΜΕΤΡΟΤΑΙΝΙΑ IRWIN 5M SHORT', 'wholesale_product__id': 76970}, when resolving the accessor wholesale_product__id
   19 :                 {% endfor %}
   20 :                 </tr>
   21 :                 </thead>
   22 :             {% endif %}
   23 :             {% endblock table.thead %}
   24 :             {% block table.tbody %}
   25 :                 <tbody {{ table.attrs.tbody.as_html }}>
   26 :                 {% for row in table.paginated_rows %}
   27 :                     {% block table.tbody.row %}
   28 :                     <tr {{ row.attrs.as_html }}>
   29 :                          {% for column, cell in row.items %} 
   30 :                             <td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
   31 :                         {% endfor %}
   32 :                     </tr>
   33 :                     {% endblock table.tbody.row %}
   34 :                 {% empty %}
   35 :                     {% if table.empty_text %}
   36 :                     {% block table.tbody.empty_text %}
   37 :                         <tr><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
   38 :                     {% endblock table.tbody.empty_text %}
   39 :                     {% endif %}


Traceback:

File "/usr/local/lib/python3.5/dist-packages/django_tables2/utils.py" in resolve
  357.                     current = current[bit]

During handling of the above exception ('wholesale_product'), another exception occurred:

File "/usr/local/lib/python3.5/dist-packages/django_tables2/utils.py" in resolve
  360.                         current = getattr(current, bit)

During handling of the above exception ('dict' object has no attribute 'wholesale_product'), another exception occurred:

File "/usr/local/lib/python3.5/dist-packages/django_tables2/utils.py" in resolve
  363.                             current = current[int(bit)]

During handling of the above exception (invalid literal for int() with base 10: 'wholesale_product'), another exception occurred:

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  143.                 response = response.render()

File "/usr/local/lib/python3.5/dist-packages/django/template/response.py" in render
  106.             self.content = self.rendered_content

File "/usr/local/lib/python3.5/dist-packages/django/template/response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "/usr/local/lib/python3.5/dist-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/templatetags/django_tables2.py" in render
  167.             return template.render(context={"table": table}, request=request)

File "/usr/local/lib/python3.5/dist-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render
  163.         return self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  53.                 result = self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  53.                 result = self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  53.                 result = self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
  53.                 result = self.nodelist.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
  165.                 values = list(values)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/rows.py" in items
  249.             column.current_value = self.get_cell(column.name)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/rows.py" in get_cell
  203.             bound_column, render_func=self._call_render, default=bound_column.default

File "/usr/local/lib/python3.5/dist-packages/django_tables2/rows.py" in _get_and_render_with
  178.         return render_func(bound_column, value)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/rows.py" in _call_render
  213.         return bound_column.link(content, **render_kwargs) if bound_column.link else content

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in __call__
  152.         attrs = self.get_attrs(**kwargs)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in get_attrs
  147.         attrs["href"] = self.compose_url(**kwargs)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in compose_url
  103.             return self.call_reverse(record=record)

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in call_reverse
  135.             params["args"] = [resolve_if_accessor(a) for a in params["args"]]

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in <listcomp>
  135.             params["args"] = [resolve_if_accessor(a) for a in params["args"]]

File "/usr/local/lib/python3.5/dist-packages/django_tables2/columns/base.py" in resolve_if_accessor
  127.             return val.resolve(record) if isinstance(val, Accessor) else val

File "/usr/local/lib/python3.5/dist-packages/django_tables2/utils.py" in resolve
  376.                                     key=bit, context=current_context, accessor=self

Exception Type: ValueError at /backorders/
Exception Value: Failed lookup for key [wholesale_product] in {'wholesale_product__code': '11500356', 'quantity': Decimal('1.00'), 'wholesale_product__description': 'ΜΕΤΡΟΤΑΙΝΙΑ IRWIN 5M SHORT', 'wholesale_product__id': 76970}, when resolving the accessor 

Есть идеи, что может вызвать ошибку?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Дело в том, что я передал словарь в таблицу, а не набор запросов, поэтому в моей таблице мне пришлось отобразить значение wholesale_product со ссылкой на словарь, как показано ниже:

def render_wholesale_product_id(self,record):
    return '%s' % (record['wholesale_product_id'])
0 голосов
/ 03 марта 2020

Вы определяете поле wholesale_product_id в своем классе BackOrderTable. Можете ли вы попробовать переименовать это поле, например, wholesale_productid. Мне интересно, совпадает ли это имя с сгенерированными именами django. См. Этот другой ответ SO: Django запрос одиночного подчеркивания, ведущий себя как двойное подчеркивание? для получения дополнительной информации.

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