我有一个表,显示我的雇员注册。我想根据他们的数据库,其中包括他们的姓名,身份证,任命等生成一个简单的HTML页面。
为此,我向视图传递了一个id,这样它就可以获得相应用户的详细信息并显示给我。一切都正常工作,直到错误发生对象不可迭代。下面是我的代码。report.html
{% if emp_item %}
{% for some in emp_item %}
<title> {{ some.employee_name }} Report</title>
<h3>{{ some.employee_name }}</h3>
<table style="width:30%" border="4">
<td>{{some.id}}</td>
<td>{{some.Annual_leave}} </td>
<td>{{some.Sick_leave}} </td>
<td>{{some.allowed}} </td>
</table>
{% endfor %}
<h2>No User</h2>
{% else %}
{% endif %}
views.py
@staff_member_required # for admin login required
def report(request, id):
emp_item = Employee.objects.get(id=id)
context = {'emp_item': emp_item}
return render(request, 'projectfiles/report.html', context)
urls.py
url(r'^(?i)Rejectleaves/$', views.rejected_leave_show,
name='Reject_show'), # user leaves
url(r'^(?i)report/(?P<id>\d+)$', views.report,
name='Report'), # user Report
models.py
class Employee(models.Model):
allowed = models.BooleanField(default=True)
employee_name = models.OneToOneField(User, on_delete = models.CASCADE)
employee_designation = models.CharField(max_length = 5)
employee_department = models.CharField(max_length = 5)
Annual_leave = models.PositiveSmallIntegerField(default=5)
Sick_leave = models.PositiveSmallIntegerField(default=5)
我想根据每个用户的流程查看他们的数据。
3条答案
按热度按时间fkaflof61#
将
Employee.objects.get(id=id)
更改为Employee.objects.filter(id=id)
“
filter()
将始终为您提供QuerySet”-它是可迭代的get()
-返回单个对象,并且该对象不可迭代0tdrvxhp2#
您正在将
emp_item
作为一个对象列表进行迭代,但它是一个对象,因为Employee.objects.get(id=id)
返回的是单个对象而不是查询集。因此,您需要做的是从模板中删除
for-loop
,如下所示:但是如果你在查询的时候使用
get
,那么你得到DoesNotExist
异常的机会就更大了,所以最好还是使用Employee.objects.filter(id=id)
来避免任何异常。如果使用
get
进行查询,则模板中的{% if emp_item %}
没有任何用处。为了更好的使用,可以在查询的时候使用
get
,如果出现异常可以给模板发消息,例如:然后在模板中:
kqhtkvqz3#
我得到了下面相同的错误:
TypeError:“Category”对象不可迭代
因为我将get()生成的对象赋值给
category__in
,如下所示:因此,我将filter()生成的查询集分配给
category__in
,如下所示,然后错误就解决了:或者,我从
category__in
中删除了__in,如下所示,然后错误就解决了: