【问题标题】:How to display part of django object model?如何显示 django 对象模型的一部分?
【发布时间】:2020-04-06 17:46:44
【问题描述】:

我试图在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
....

你能帮帮我吗? 提前谢谢你

【问题讨论】:

  • 在第一个 if 中,您不是 obj,而是查询集(可迭代对象序列)。 else 部分仅包含一个 obj。在渲染时,您正在尝试迭代不可迭代的对象。那是因为你有一个例外。将第二个 obj 更改为 iterablesequence(例如使用列表)
  • 你能提供你的模型吗?
  • else情况下obj不是MyModel,它是一个数字,因为你计算len(str(obj))-5。\
  • 我明白了,但是我测试了几个代码来导出一个有效且正确的 ele ....那我应该为 That (if ... else...) 语句做什么?
  • @Zoleikha:请在下面查看我的回答,如果您还有其他问题,请告诉我。

标签: python django web typeerror iterable


【解决方案1】:

谢谢大家,我修好了,我应该在我的模型中使用“value_to_string()”。

【讨论】:

    【解决方案2】:

    objMyModel 类型的对象列表。

    在您的else条件下:

    obj = len(str(obj))-5
    

    您正在将 obj 更改为整数。你应该这样做:

    for idx, o in enumerate(obj): obj[idx].id = o[len(str(o.id)) - 5:] 这会从 obj 中的每个 MyModel 对象中提取最后 5 个字符。

    【讨论】:

    • 我修复了这种情况错误,但它什么也没显示:
    • 是的,我的对象包括 List 的查询集,应该显示为“---5455” 使用 CONTROL-C 退出服务器。 [13/Dec/2019 10:05:16] "GET / HTTP/1.1" 200 525 我试过:obj = obj[len(list(obj)) - 5:] 但现在 if 语句不是工作......并显示所有数据
    • 更新了我的答案,请再次查看。
    【解决方案3】:

    在 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})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 2018-09-22
      • 2021-05-26
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2018-08-03
      • 2015-02-13
      相关资源
      最近更新 更多