首页 > 解决方案 > Django ValueError: int() 以 10 为底的无效文字显示字符串字段内容而不是使用 ID 值

问题描述

请帮忙,我不断收到这个没有意义的 ValueError 。

系统:PostGres DB 上的 Django 2.2(带有夹层)。

在我的模型中,我有一个外键字段:

class Keyword(models.Model):
    site = models.ForeignKey(Site, related_name='sitekeywords', on_delete=models.CASCADE)
    keyword = models.CharField("Keyword", max_length=64)

    def __str__(self):
        return "%s" % (self.keyword)

    class Meta:
        verbose_name_plural = "Keywords"

注意:关键字 CharField 不需要是唯一的。

Keyword 模型上的 ID 由 Django 创建和管理。此关键字模型与具有显式 ID 字段的站点模型相关: id = models.AutoField("ID", blank=False, primary_key=True)

当我在 Admin 中尝试编辑一个站点(将关键字编辑作为内联)时,有时会收到一个 ValueError 显示: invalid literal for int() with base 10: 'Neoproterozoic' ...但是“新元古代”是一个关键字关键字,代码应该使用关键字 ID,所以我很困惑。请注意,这只是一个示例,错误中的字符串可以是关系中的任何关键字关键字字符串。

这是来自 forms.py 的内联表单:

class KeywordAdminForm(fforms.ModelForm):
    class Meta:
        model = Keyword
        fields = ['keyword']
        
        
class KeywordInlineAdminForm(KeywordAdminForm):
    pass

错误说当管理表单生成 fieldset.html 时发生:

Error during template rendering
In template /d/app/venv/lib64/python3.6/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 19

9               {% for field in line %}
10                  <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
11                      {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
12                      {% if field.is_checkbox %}
13                          {{ field.field }}{{ field.label_tag }}
14                      {% else %}
15                          {{ field.label_tag }}
16                          {% if field.is_readonly %}
17                              <div class="readonly">{{ field.contents }}</div>
18                          {% else %}
19                              {{ field.field }}
20                          {% endif %}
21                      {% endif %}
22                      {% if field.field.help_text %}
23                          <div class="help">{{ field.field.help_text|safe }}</div>
24                      {% endif %}
25                  </div>
26              {% endfor %}
27          </div>
28      {% endfor %}
29  </fieldset>

堆栈跟踪如下:

Environment:


Request Method: GET
Request URL: http://ausgeol-dev.utas.edu.au/admin/ausgeolapp/site/4456/change/

Django Version: 2.2.16
Python Version: 3.6.8
Installed Applications:
('mezzanine.boot',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.redirects',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.sitemaps',
 'django.contrib.gis',
 'django.contrib.messages',
 'dal',
 'dal_select2',
 'webapp',
 'ausgeolapp',
 'debug_toolbar',
 'bootstrap',
 'bootstrap4',
 'bootstrap_datepicker_plus',
 'jquery',
 'vital_theme',
 'vital_themeVT',
 'mezzanine.conf',
 'mezzanine.core',
 'mezzanine.generic',
 'mezzanine.pages',
 'mezzanine.blog',
 'mezzanine.forms',
 'mezzanine.galleries',
 'mezzanine.twitter',
 'mezzanine.accounts',
 'djgeojson',
 'leaflet',
 'django_tables2',
 'django_filters',
 'rest_framework',
 'floppyforms',
 'colorfield',
 'compressor',
 'filebrowser_safe',
 'grappelli_safe',
 'django.contrib.admin',
 'django.contrib.staticfiles',
 'django_comments')
Installed Middleware:
('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',
 'mezzanine.core.request.CurrentRequestMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware',
 'mezzanine.core.middleware.RedirectFallbackMiddleware',
 'mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware',
 'mezzanine.core.middleware.SitePermissionMiddleware',
 'mezzanine.pages.middleware.PageMiddleware')


Template error:
In template /d/app/venv/lib64/python3.6/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 19
   invalid literal for int() with base 10: 'Neoproterozoic'
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
   11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly">{{ field.contents }}</div>
   18 :                         {% else %}
   19 :                              {{ field.field }} 
   20 :                         {% endif %}
   21 :                     {% endif %}
   22 :                     {% if field.field.help_text %}
   23 :                         <div class="help">{{ field.field.help_text|safe }}</div>
   24 :                     {% endif %}
   25 :                 </div>
   26 :             {% endfor %}
   27 :         </div>
   28 :     {% endfor %}
   29 : </fieldset>


Traceback:

File "/d/app/venv/lib64/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/d/app/venv/lib64/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  145.                 response = self.process_exception_by_middleware(e, request)

File "/d/app/venv/lib64/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  143.                 response = response.render()

File "/d/app/venv/lib64/python3.6/site-packages/django/template/response.py" in render
  106.             self.content = self.rendered_content

File "/d/app/venv/lib64/python3.6/site-packages/django/template/response.py" in rendered_content
  83.         content = template.render(context, self._request)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/backends/django.py" in render
  61.             return self.template.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  171.                     return self._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  150.             return compiled_parent._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  62.                 result = block.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  188.             return template.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  173.                 return self._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/loader_tags.py" in render
  188.             return template.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  173.                 return self._render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  209.                     nodelist.append(node.render_annotated(context))

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/defaulttags.py" in render
  309.                 return nodelist.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  937.                 bit = node.render_annotated(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render
  993.         return render_value_in_context(output, context)

File "/d/app/venv/lib64/python3.6/site-packages/django/template/base.py" in render_value_in_context
  972.             value = str(value)

File "/d/app/venv/lib64/python3.6/site-packages/django/utils/html.py" in <lambda>
  388.     klass.__str__ = lambda self: mark_safe(klass_str(self))

File "/d/app/venv/lib64/python3.6/site-packages/django/forms/boundfield.py" in __str__
  33.         return self.as_widget()

File "/d/app/venv/lib64/python3.6/site-packages/django/forms/boundfield.py" in as_widget
  93.             renderer=self.form.renderer,

File "/d/app/venv/lib64/python3.6/site-packages/dal/widgets.py" in render
  151.         widget = super(WidgetMixin, self).render(name, value, attrs, **kwargs)

File "/d/app/venv/lib64/python3.6/site-packages/django/forms/widgets.py" in render
  241.         context = self.get_context(name, value, attrs)

File "/d/app/venv/lib64/python3.6/site-packages/django/forms/widgets.py" in get_context
  678.         context = super().get_context(name, value, attrs)

File "/d/app/venv/lib64/python3.6/site-packages/django/forms/widgets.py" in get_context
  639.         context['widget']['optgroups'] = self.optgroups(name, context['widget']['value'], attrs)

File "/d/app/venv/lib64/python3.6/site-packages/dal/widgets.py" in optgroups
  141.             self.filter_choices_to_render(selected_choices)

File "/d/app/venv/lib64/python3.6/site-packages/dal/widgets.py" in filter_choices_to_render
  188.             pk__in=[c for c in selected_choices if c]

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/query.py" in filter
  892.         return self._filter_or_exclude(False, *args, **kwargs)

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/query.py" in _filter_or_exclude
  910.             clone.query.add_q(Q(*args, **kwargs))

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/sql/query.py" in add_q
  1290.         clause, _ = self._add_q(q_object, self.used_aliases)

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/sql/query.py" in _add_q
  1318.                     split_subq=split_subq, simple_col=simple_col,

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/sql/query.py" in build_filter
  1251.         condition = self.build_lookup(lookups, col, value)

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/sql/query.py" in build_lookup
  1116.         lookup = lookup_class(lhs, rhs)

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/lookups.py" in __init__
  20.         self.rhs = self.get_prep_lookup()

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/lookups.py" in get_prep_lookup
  210.                 rhs_value = self.lhs.output_field.get_prep_value(rhs_value)

File "/d/app/venv/lib64/python3.6/site-packages/django/db/models/fields/__init__.py" in get_prep_value
  972.         return int(value)

Exception Type: ValueError at /admin/ausgeolapp/site/4456/change/
Exception Value: invalid literal for int() with base 10: 'Neoproterozoic'

标签: django-modelsadmininlinevalueerrorfieldset

解决方案


推荐阅读