python - 异常值:__str__ 在 django 模型中返回非字符串(int 类型)
问题描述
我想创建一个函数,该函数返回在过去 48 小时内发送导航数据的每辆车的最后点列表。我创建了一个可以正常工作的视图,并且可以正确显示名称,但是当我想Vehicle
从Django 管理面板添加新视图时,它会显示错误。
/admin/navigation/navigationrecord/add/ str处的 TypeError返回非字符串(int 类型)
我该如何解决?是否有更有效和更有效的方式来列出过去 48 小时内的数据?
模型.py
class Vehicle(models.Model):
id = models.IntegerField(primary_key=True)
plate = models.CharField(max_length=30)
def __str__(self):
return str(self.plate)
class NavigationRecord(models.Model):
id = models.IntegerField(primary_key=True)
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
datetime = models.DateField(default=timezone.now)
latitude = models.FloatField()
longitude = models.FloatField()
def __str__(self):
return self.vehicle
视图.py
def get_48_hours(request):
time_48 = datetime.now() - timedelta(hours=48)
results = NavigationRecord.objects.filter(datetime__gte=time_48)
context = {
'results': results,
}
return render(request, 'navigation.html', context)
导航.html
<table class="table table-hover">
<thead>
<tr>
<th>ID</th>
<th>Vehicle</th>
</tr>
</thead>
<tbody>
{% for result in results %}
<tr>
<td>{{result.id}}</td>
<td>{{result.vehicle}}</td>
<td>{{result.datetime}}</td>
</tr>
{% endfor %}
</tbody>
</table>
管理员.py
models = [Vehicle, NavigationRecord]
admin.site.register(models)
追溯
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/navigation/navigationrecord/add/
Django Version: 2.2.13
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'navigation']
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 C:\Users\edeni\senior\myenv\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 19
__str__ returned non-string (type int)
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 "C:\Users\edeni\senior\myenv\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\core\handlers\base.py" in _get_response
145. response = self.process_exception_by_middleware(e, request)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\core\handlers\base.py" in _get_response
143. response = response.render()
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\response.py" in render
106. self.content = self.rendered_content
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\response.py" in rendered_content
83. content = template.render(context, self._request)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\backends\django.py" in render
61. return self.template.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
171. return self._render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\loader_tags.py" in render
150. return compiled_parent._render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\loader_tags.py" in render
150. return compiled_parent._render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\loader_tags.py" in render
62. result = block.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\loader_tags.py" in render
62. result = block.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\loader_tags.py" in render
188. return template.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
173. return self._render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\defaulttags.py" in render
309. return nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\defaulttags.py" in render
309. return nodelist.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render
993. return render_value_in_context(output, context)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\template\base.py" in render_value_in_context
972. value = str(value)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\utils\html.py" in <lambda>
388. klass.__str__ = lambda self: mark_safe(klass_str(self))
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\boundfield.py" in __str__
33. return self.as_widget()
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\boundfield.py" in as_widget
93. renderer=self.form.renderer,
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\widgets.py" in render
241. context = self.get_context(name, value, attrs)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\contrib\admin\widgets.py" in get_context
288. 'rendered_widget': self.widget.render(name, value, attrs),
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\widgets.py" in render
241. context = self.get_context(name, value, attrs)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\widgets.py" in get_context
678. context = super().get_context(name, value, attrs)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\widgets.py" in get_context
639. context['widget']['optgroups'] = self.optgroups(name, context['widget']['value'], attrs)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\widgets.py" in optgroups
587. for index, (option_value, option_label) in enumerate(self.choices):
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\models.py" in __iter__
1138. yield self.choice(obj)
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\models.py" in choice
1150. return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
File "C:\Users\edeni\senior\myenv\lib\site-packages\django\forms\models.py" in label_from_instance
1216. return str(obj)
Exception Type: TypeError at /admin/navigation/navigationrecord/add/
Exception Value: __str__ returned non-string (type int)
解决方案
如果您查看 stracktrace,它的字面意思是:__str__ returned non-string (type int)
. 这是由您NavigationRecord
的 '__str__
方法引起的,该方法返回self.vehicle
的是外键,因此是整数。尝试更改此方法以返回 str self.vehicle
。__str__
那应该叫Vehicle
上课。
def __str__(self):
return str(self.vehicle)
推荐阅读
- python - 在没有安装 pip 的包的情况下在 Conda 环境中运行
- python - 腌制对象并将其加载到 numpy 数组中
- python - py_call_impl 中的错误,当在 R 的 phate 中使用 knn.dist.method = 'precomputed'
- python - 如何使用 Django 对两个以上的表进行连接?
- javascript - req.files keeps returning undefined
- regex - 正则表达式:将接下来的两行(选项卡)放在第一个返回
- python - 完整的 Python 类
- python - 使用理解编辑列表元素会删除部分列表
- macos - 我无法安装diesel-cli 与火箭一起使用
- python - 如何在组python pandas中按行查找百分比变化