如何显示django对象模型的一部分?

时间:2019-12-13 09:38:52

标签: python django web typeerror iterable

当用户不是超级用户时,我试图在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
....

能帮我吗? 预先谢谢你

3 个答案:

答案 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()”。