显示 django 对象表

2024-01-06

我需要使用 Django 显示数据库中的表。最明显的方法是手动输入表标题并循环查询结果model.objects.all()。然而,由于很懒,我想自动执行此操作,即通过内省加载模型中的所有字段以显示为列标题,并加载所有字段值以显示为行。这种方法还可以为我节省一些时间,因为当我的模型发生变化时,我不必更新我的模板代码。我已经让它工作了,但有两个问题:

  1. 我找不到加载 AutoField 字段 (id) 值的方法,因此我必须切掉 ID 列。
  2. 该代码看起来相当混乱,尤其是使用随机模板标签时。

这是我的代码。请注意,代码工作正常,因此我将跳过所有导入,因为它们是正确的:

views.py我使用序列化器来序列化数据,这是我在 stackoverflow 上读到的一个技巧

def index(request):
   fields    = MyModel._meta.fields
   data      = serializers.serialize("python", MyModel.objects.all())
   context_instance = RequestContext(request, {    
       'data'      : data,
       'fields'    : fields,
   })
   return TemplateResponse(request, 'index.html', context_instance)

模板/index.html:请注意,我必须通过切掉字段列表的第一个元素来切掉 ID 列

{% with fields|slice:"1:" as cached_fields %}
<table>
    <thead>
        <tr>
            {% for field in cached_fields %}
                <th>{% get_verbose_name field %}</th>
            {% endfor %}
        </tr>
    </thead>
    <tbody>
        {% for instance in data %}
        <tr>
            {% for field in cached_fields %}
                <td>{% get_value_from_key instance.fields field %}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </tbody>
</table>
{% endwith %}

模板标签/extra_tags.py

# tag to get field's verbose name in template 
@register.simple_tag
def get_verbose_name(object):
    return object.verbose_name

# tag to get the value of a field by name in template
@register.simple_tag
def get_value_from_key(object, key):
    # is it necessary to check isinstance(object, dict) here? 
    return object[key.name]

serializers.serialize("json or xml", Model.objects.all())格式返回 id 字段;可能不是您想要的,但一些 jQuery 网格插件可以进一步自动化该任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示 django 对象表 的相关文章

随机推荐

  • 使用 html/css3 和 WebView 将图像缩放到屏幕...在图像加载之前出现白屏

    我正在 Android 中使用 WebView 来加载一些本地 html 将图像缩放到屏幕作为背景 但是 当我开始加载 WebView 的活动时 我在图像之前看到了非常短暂的白屏闪烁负载 这不是什么大不了的事 但我想避免这种情况 我尝试将所
  • Django:如何迁移运行时创建的动态模型

    在我的 Django 应用程序中 特定的用户输入将导致创建新模型 这是我用来创建模型并注册它的代码 model type model name ExistingModel attrs admin site register model ad
  • 如何让 Safari 发送 if-modified-since 标头?

    当我生成页面时 我发送标题 HTTP 1 1 200 OK Cache Control private Content Type text html charset utf 8 Last Modified Mon 04 Apr 2011 2
  • PHP 中的 JavaScript 函数 fromCharCode()

    var test String fromCharCode 112 108 97 105 110 document write test Output plain 有没有 PHP 代码可以用作String fromCharCode JavaS
  • CanCan::Ability current_user 方法在哪里定义?

    差不多就是我在标题中提到的内容 我在代码中使用 CanCan Ability 来检查权限和能力 它期望定义一个 current user 方法 我猜它来自 devise 但不确定 我希望覆盖它 最好的方法是什么 被发现了here https
  • JQuery:可以有 3 个输入的滑块吗?

    我想创建一个具有 3 个输入的滑块 我做了很多研究 但找不到比带有 2 个输入的滑块更多的东西 这是代码 http jqueryui com slider range http jqueryui com slider range 如何创建
  • pip - 使用项目文件夹作为安装源

    我想配置pip使用自定义搜索路径从本地文件夹安装包 该文件夹未托管在 PyPI 上 目标是能够运行 pip install user my non published package 并让它安装所述软件包 home myuser proje
  • JSTree 检查所选节点是否为叶子或仅叶子可选

    我创建了一个jstree如下 js tree jstree core data url pageContext request contextPath makeTree plugins types search data function
  • SAM 模板内的 IAM 角色

    如何在 SAM 模板中创建 IAM 角色 就像我在 SAM 包中所做的那样 我尝试了如下 lambdaFunctionRole Type AWS IAM Role Properties AssumeRolePolicyDocument Ve
  • 如何从父文档访问 iframe 内的元素?

    function contents nb name height 1 document getElementById contents iframe height height px 2 var currentIFrame contents
  • 有效 32 位有符号整数的正则表达式

    我很确定这个网站实际上还没有回答这个问题 一劳永逸地 匹配 32 位有符号整数范围内的数字字符串的最小正则表达式是什么 2147483648 to 2147483647 I must使用正则表达式进行验证 这是我可用的唯一选项 我努力了 d
  • 如何将接口转换为 C# 中的类型?

    我有一个返回接口的属性 在调试过程中 我可以中断返回的内容 虽然它是接口 但 Visual Studio 足够聪明 可以知道它实际上是什么派生类型 我认为它正在使用反射或其他东西 我不知道 我的问题是 我可以在运行时获得相同的信息 以便我可
  • 在 Apache Camel 日志中记录简单文本

    可以在 Camel 中记录简单文本 如下所示
  • 按 pandas 中除一个索引列之外的所有内容进行分组

    我的数据分析反复依赖于一个简单但不确定的主题 即 对除外的所有内容进行分组 以这个多索引为例 df accuracy velocity name condition trial john a 1 1 403105 0 419850 2 0
  • 拥有多个文件组是否有助于加快数据库速度?

    目前 我正在开发一个使用 MS SQL Server 2005 进行相当密集计算的产品 在较高的层面上 我的产品的架构基于 运行 的概念 每次我进行一些分析时 它都会存储在一系列中运行表数 每次运行约 100 个表 我遇到的问题是 当运行次
  • 导入 MDC Switch 组件时出现“无法读取未定义的属性‘MDCSwitch’”错误

    我正在使用express和material components web编写一个Node应用程序 但我遇到了一个问题 TextField可以工作 但Switch不能 这是我用来将相关 JS 附加到元素的代码 slice call docum
  • 检测可滚动下拉列表的结尾

    我正在动态生成一个选择选项框 可以有任意数量的选项 当用户向下滚动到框的末尾时 我需要触发一个事件 我将调用服务器并使用更多选项填充选择 这就像创建分页 但是在下拉框中 谁能告诉我如何做到这一点 所以我唯一需要的是当用户滚动到下拉列表的末尾
  • 插件无法加载

    为什么我的插件无法加载 引用了 jquery 和插件链接 该插件名为 请帮我找到代码中缺少的内容
  • 如何设置Y轴高图上点的间隔

    我是第一次使用 highcharts 我试图弄清楚如何将 Y 轴点设置为静态 我使用了 min 0 和 max 140 y 轴上的点为 0 25 50 75 100 125 和 150 其中我希望它为 0 20 40 60 80 100 1
  • 显示 django 对象表

    我需要使用 Django 显示数据库中的表 最明显的方法是手动输入表标题并循环查询结果model objects all 然而 由于很懒 我想自动执行此操作 即通过内省加载模型中的所有字段以显示为列标题 并加载所有字段值以显示为行 这种方法