当用户不是超级用户时,我试图在Django
中显示数据库的字段,
给定像GR96 0810 0010 0000 0123 4567 890
这样的字段,
该值应该在各处显示为---7890
,这是我的代码:
view.py:
def index(request):
obj = MyModel.objects.all()
if request.user.is_superuser:
return render(request, 'app/index.html', {'obj': obj})
else:
obj = len(str(obj))-5
return render(request, 'app/index.html', {'obj': obj})
Template:
{% for ele in obj %}
<tr>
<th scope="row">{{ ele.id }}</th>
<td>{{ ele }}</td>
</tr>
{% endfor %}
This is error:
TypeError at /
'int' object is not iterable
Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 3.0
Exception Type: TypeError
Exception Value:
'int' object is not iterable
....
能帮我吗? 预先谢谢你
答案 0 :(得分:0)
obj 是 MyModel 类型的对象的列表。
在您的其他条件下:
obj = len(str(obj))-5
您正在将obj更改为整数。相反,您应该这样做:
for idx, o in enumerate(obj):
obj[idx].id = o[len(str(o.id)) - 5:]
这将从 obj 中的每个MyModel对象中提取最后5个字符。
答案 1 :(得分:0)
在else语句中,您将obj重新声明为整数值,因此无法在模板中对其进行迭代。我建议在用户为超级管理员时编辑返回值:
view.py:
def index(request):
obj = MyModel.objects.all()
if request.user.is_superuser:
return render(request, 'app/index.html', {'obj': obj})
else:
for single_obj in obj:
single_obj.your_field_name = "--" + single_obj.your_field_name.replace(" ", "")[-4:]
return render(request, 'app/index.html', {'obj': obj})
答案 2 :(得分:0)
谢谢,我已修复它,我应该在模型中使用“ value_to_string()”。