如何内省 Django 中的属性和模型字段?

2023-11-25

我正在尝试获取给定对象的所有现有模型字段和属性的列表。有没有一种干净的方法来内省对象,以便我可以获得字段和属性的字典。

class MyModel(Model)
    url = models.TextField()

    def _get_location(self):
        return "%s/jobs/%d"%(url, self.id)

    location = property(_get_location)

我想要的是返回一个如下所示的字典:

{
  'id' : 1,
  'url':'http://foo',
  'location' : 'http://foo/jobs/1'
}   

我可以用model._meta.fields获取模型字段,但这并没有给我提供属性但不是真正的数据库字段的东西。


如果您严格只想要模型字段和属性(使用属性声明的字段和属性),那么:

def get_fields_and_properties(model, instance):
    field_names = [f.name for f in model._meta.fields]
    property_names = [name for name in dir(model) if isinstance(getattr(model, name), property)]
    return dict((name, getattr(instance, name)) for name in field_names + property_names)

instance = MyModel()
print get_fields_and_properties(MyModel, instance)

这里唯一额外的一点是运行class查找与属性描述符对应的字段。通过类访问它们会给出描述符,而通过实例访问它们会给出值。

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

如何内省 Django 中的属性和模型字段? 的相关文章

随机推荐

  • 如何在 Android 中自定义 SeekBar 的外观?

    I use a SeekBar在我的应用程序中 我想对其进行一些自定义 我已经想出了如何改变Drawable用于拇指和背景 我的问题是如何改变尺寸SeekBar 如果我只是改变高度SeekBar like this theViewis on
  • 如何使用 gstreamer 以 h265 进行流式传输?

    我正在尝试同时使用最新的 gstreamer 和 x265enc 我看到有人已经发布了一些提交http cgit freedesktop org gstreamer gst plugins bad log ext x265 gstx265e
  • git local master分支停止跟踪remotes/origin/master,无法推送

    就在我以为我已经掌握窍门的时候git checkout b newbranch 提交 提交 提交 git checkout master git merge newbranch git rebase i master git Pushgit
  • 如何在 PyCharm 中远程调试

    我现在面临的问题是 我通过 SSH 在远程主机上部署 Python 代码 脚本传递一些参数并且必须由特定用户运行 我创建的 PyCharm 运行 调试配置通过不同用户通过 SSH 连接 无法与实际运行脚本的用户连接 我想通过 PyCharm
  • 找不到用于签名配置“调试”的密钥库文件 D\Telegram-master\TMessagesProj\config\release.keystore

    我下载了新版本的 Telegram 当运行它时 出现此错误 Keystore file D Telegram master TMessagesProj config release keystore not found for signin
  • Android HttpClient Cookie

    Android HttpClient 是否可以自动管理 cookie 它确实支持它 阅读下面的帖子 似乎在调用执行时必须传递相同的 HttpContext response httpClient execute httpPost local
  • 不必要的水平滚动条jqGrid

    在我的 jqGrid 使用版本 4 0 0 中 我得到了一个不必要的水平滚动条 但也有一个垂直滚动条 此问题仅出现在 Chrome 和 Firefox 中 但不会出现在 Internet Explorer 中 看起来表格宽度的计算有问题 因
  • Java Swing:实现输入值的有效性检查

    在我的 Swing 应用程序中 用户必须在切换到下一个窗口之前插入数字和值 现在 作为一个干净的程序应该检查每个输入是否有效 如果无效 则会显示错误消息并且不会打开下一个窗口 该检查的结构如下 示例 Button buttonToOpenN
  • 使用 .htaccess 从 URL 中删除 PHP 文件扩展名

    我刚刚在 Ubuntu 12 上安装完 LAMP 堆栈 并遇到了 Apache 的 htaccess 文件的问题 我启用了重写和重定向 mods 并且 htaccess 文件正在工作 如果不存在 www URI 将重定向到 www 但无论我
  • 如何使用 GWT 检查给定的图像 URL 是否存在?

    我想检查给定的 URL 是否存在并且它是一个图像 以便创建一个new Image String url 从中 如果给定的 URL 不是图像 那么它应该返回错误 我一直在寻找同样的东西 我想确定何时未从 URL 加载图像 有一个 ErrorH
  • 如何使用 Angular 动态加载 CSS

    在过去的几天里 我一直在尝试解决这个问题的几个答案 建议和教程 但不幸的是他们都没有成功 最接近的是这样的 https juristr com blog 2019 08 dynamically load css angular cli 但它
  • 如何交换字符串中的两个字符?

    我想写一个函数如下 输入 字符串 A int i 0 输出 将 i 1 处的字符与 i 处的字符交换的字符串 A 什么是clean能够实现这一目标的解决方案 我目前的解决方案是 let mut swapped input str 0 i t
  • React中createStore和createStoreWithMiddleware有什么区别?

    我找到了两种配置 redux createStore 的方法 1 https github com TeamWithBR SampleProjectTodo blob master src store configureStore js 2
  • ASP.NET MVC - 填充下拉列表

    我是 ASP NET MVC 新手 我试图弄清楚如何根据数据库中的值创建基本下拉列表 在 ASP NET Web 表单中 我知道我可以加载如下下拉列表 页面 aspx
  • 检查数组是否有一个或多个空值[重复]

    这个问题在这里已经有答案了 我有数组 var 如果数组中的一个或多个元素为空 我的意思是 字符串是 我想返回 FALSE 我觉得array filter 是更好的方法 但我不知道如何以这种方式过滤它 我该怎么做 函数emptyElement
  • 仅使用内置库使用 Python 制作基本的网络抓取工具 - Python

    学习Python 我试图制作一个没有任何第三方库的网络爬虫 这样这个过程对我来说就不会被简化 而且我知道我在做什么 我浏览了一些在线资源 但所有这些资源都让我对某些事情感到困惑 html 看起来像这样 lots of other div t
  • 有没有一个公式可以将纬度和经度转换为单个数字?

    你能告诉我是否有一个公式可以将纬度和经度转换为单个数字 我计划将其用于提供交付路由的软件中的数据库表 表行将包含该号码以及邮政地址 数据库表将按数字升序排序 以便软件可以找出卡车需要前往第一个 第二个等的地址 请您回复显示 VB 或 VB
  • 如何指定运行脚本的python版本?

    我现在正在使用预装 python 2 7 5 的 mac 学习 python 但我也安装了最新的3 4 我知道如何选择在命令行模式下使用哪个解释器 即 python vs python 3 将调出各自的解释器 但是 如果我只是编写一个包含此
  • 自定义自动隐藏浮动操作按钮行为不起作用

    我试图在 NestedScrollView 向下滚动时隐藏 FloatingActionButton 并在 NestedScrollView 向上滚动时显示自身 这是我的布局
  • 如何内省 Django 中的属性和模型字段?

    我正在尝试获取给定对象的所有现有模型字段和属性的列表 有没有一种干净的方法来内省对象 以便我可以获得字段和属性的字典 class MyModel Model url models TextField def get location sel