为什么我不能将 __getattr__ 与 Django 模型一起使用?

2024-01-01

我在网上看到过人们使用的例子__getattr__使用 Django 模型,但每当我尝试时都会出错。 (姜戈1.2.3)

我使用的时候没有任何问题__getattr__在普通物体上。例如:

class Post(object):
     def __getattr__(self, name):
         return 42

工作得很好...

 >>> from blog.models import Post
 >>> p = Post()
 >>> p.random
 42

现在,当我尝试使用 Django 模型时:

from django.db import models
class Post(models.Model):
     def __getattr__(self, name):
         return 42

并在解释器上测试它:

 >>> from blog.models import Post
 >>> p = Post()
 ERROR: An unexpected error occurred while tokenizing input The

以下回溯可能已损坏 或无效 错误消息为:('EOF 在多行语句中', (6, 0))

-------------------------------------------------- -------------------------- 类型错误
回溯(最近一次调用最后一次)

/用户/乔什/项目/ 在 ()

/Users/josh/project/lib/python2.6/site-packages/django/db/models/base.pyc 在init(自我,*args,**kwargs) 第338章 第339章 该函数的参数" % kwargs.keys()[0]) --> 340 信号.post_init.send(sender=self.class, 实例=自身) 第341章 342 防御repr(self):

/Users/josh/project/lib/python2.6/site-packages/django/dispatch/dispatcher.pyc 在发送(自我,发件人,**命名) 160 161 self._live_receivers(_make_id(sender))中的接收者: --> 162 响应 = 接收者(信号=自身,发送者=发送者, **命名) 163 响应.append((接收者,响应)) 164 回复

/Users/josh/project/python2.6/site-packages/photologue/models.pyc 在add_methods(发件人,实例, 信号,*args,**kwargs) 第728章 第729章 --> 730 实例.add_accessor_methods() 第731章 第732章 post_init 信号

类型错误:“int”对象不是 可调用的

有人可以解释发生了什么事吗?


编辑:我在示例中可能过于抽象,这里有一些代码更接近我在网站上实际使用的代码:

class Post(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField()
    date_published = models.DateTimeField()
    content = RichTextField('Content', blank=True, null=True)
    # Etc...

Class CuratedPost(models.Model):
    post = models.ForeignKey('Post')
    position = models.PositiveSmallIntegerField()

    def __getattr__(self, name):
        ''' If the user tries to access a property of the CuratedPost, return the property of the Post instead...  '''
        return self.post.name

    # Etc...

While I could为 Post 类的每个属性创建一个属性,这会导致大量代码重复。此外,这意味着每当我添加或编辑 Post 类的属性时,我都必须记住对 CuratedPost 类进行相同的更改,这似乎是代码腐烂的秘诀。


使用 __getattr__ 时必须小心。只拦截你知道的,让基类处理你不知道的。

第一步是,你可以使用属性来代替吗?如果你想要一个返回 42 的“随机”属性,那么这更安全:

class Post(...):
  @property
  def random(self):
    return 42

如果你想要“random_*”(如“random_1”,“random_34”等)做某事,那么你必须像这样使用 __getattr__ :

class Post(...):
  def __getattr__(self, name):
    if name.startswith("random_"):
      return name[7:]
    return super(Post, self).__getattr__(name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能将 __getattr__ 与 Django 模型一起使用? 的相关文章

  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • 如何在flutter中获取firestore文档的documentid?

    我已尝试以下操作 但它返回一个随机字符串 该字符串不存在于 firestore 中 我确实设法使用查询快照获取父集合的 documentid DocumentReference doc ref Firestore instance coll
  • MSTest 代码覆盖率

    我有一个 Web 服务的测试项目 当我在调试模式下运行测试时 一切正常 但是 当我刚刚运行测试时 对于我尝试获取代码覆盖率的引用程序集 出现以下错误 类初始化方法 WebServiceTest wstest MyClassInitializ
  • NodeJs 文件上传期间停止请求

    我正在编写一个图像上传器 我想将图像的大小限制在 3mb 以下 在服务器端 我可以检查标题中图像的大小 如下所示 使用express app post upload function req res if req headers conte
  • 多线程环境下静态局部变量初始化

    假设有一个函数 可能是成员函数 SomeType foo static SomeType var generateVar return var How var将被初始化 如果foo会同时从多个线程中 第一次 调用吗 是否保证generate
  • ndk-build eclipse 参数:找不到类

    我们正在为 Android 设备开发一个系统 为此 我们使用 FC16 Eclipse SDK NDK 在 Eclipse 中 运行 gt 外部工具 gt 外部收费配置 gt 我们有以下选项卡 Main Location usr java
  • IntelliJ IDEA 在哪里保存本地历史文件?

    我的公司有一项政策 要求在本地开发人员计算机上将源代码保存在加密存储中 IntelliJ IDEA 在哪里保存用于驱动其的代码更改的副本当地历史特色 http www jetbrains com idea features local hi
  • 构建失败 java.lang.OutOfMemoryError: Java 堆空间

    我在构建 build xml 时遇到这个问题 BUILD FAILED java lang OutOfMemoryError Java heap space at java util Arrays copyOf Arrays java 27
  • 捕获模块加载错误并处理它们

    我正在尝试使用 require js 加载一些内容 如果内容不存在 我想捕获错误并通知用户 在萤火虫中我可以看到两个错误 网络错误 404 未找到 然后几秒钟后 var e new Error msg nhttp requirejs org
  • AbstractRoutingDataSource + JPA 不会创建除 defaultTargetDataSource 之外的表

    我使用 JPA 注释 Hibernate 实现 来初始化我的数据库架构 我关注这篇文章动态数据源路由 http blog springsource com 2007 01 23 dynamic datasource routing 实现动态
  • For 循环中的 onClick 事件

    我尝试创建一个循环for 并通过 onclick 事件递增 但它不起作用 var gameCase 9 itemLists game getElementsByTagName li 9 items for var i 0 i lt item
  • 当默认异常处理建议已被另一个建议处理时,如何忽略它

    我目前有一个 ExceptionAdvice 类 它处理所有基本 400 405 404 和其他 异常 例如 我有一个默认建议 它处理所有 MethodArgumentNotValidExceptions 并返回 400 Bad Reque
  • For循环删除行

    我使用的宏列出了我选择的任何目录中的所有文件名 我正在编写代码 将文件名分解为稍后可以使用的块 文件名列表从单元格 F6 开始并沿列向下延伸 这是我到目前为止编写的代码 Dim ContractNum As String Dim InvNu
  • 客户端机器上的hadoop api配置

    超级菜鸟 我有一台带有 cdh3u1 伪发行版的服务器计算机 以及一台带有使用 cdh3u1 API 的 java 应用程序的客户端计算机 如何配置客户端与服务器通信 我已经搜索了几个小时 但找不到 客户端配置 文件在哪里 对我来说 hdf
  • 如何阻止创建 .mdmp 文件

    我有一个由 Tomcat 托管的 Solr 实例 最近开始创建小型转储文件 任何日志中都没有错误 Solr 继续顺利工作 这些文件大约有 14GB 正在填满硬盘 在我们调查问题时 有没有办法关闭此功能 一般来说 当JVM崩溃时的内容hs e
  • 性能计数器 NextValue() 非常慢(1,000+ 计数器)

    在我们的应用程序中 我们使用 Windows 性能计数器来存储一些应用程序指标 稍后在某些 Web 服务中检索这些指标 我对从计数器读取值所需的时间有疑问 我已经查看了应用程序的其余部分 一切都很好 性能方面 但是从循环内的计数器 从列表或
  • 带 OR 的 LINQ WHERE

    我使用 LINQ 创建 where 子句 如下所示 var query from x in context Xs select x if y query query Where x gt x Y 1 我有一堆 如果 哪里 的陈述 我遇到的问
  • 是否可以使用 cognito 的授权代码授予类型作为 api 网关中的授权者?

    我想知道是否有任何方法或可能性可以在保护API网关时将授权代码授予类型实现为Authroizer 根据搜索结果 最推荐使用 授权代码 授予类型来保护 API 我发现下面的文章解释了使用 cognito 客户端凭据 作为授权类型来保护 api
  • FtpWebRequest 返回错误 550 文件不可用

    我创建了一个小型 Windows 窗体应用程序 用于将文件上传到我们客户的 ftp 站点之一 但我遇到的问题是 当我在本地计算机上运行此应用程序时 它会成功上传文件 但是如果我在我们的服务器上运行这个程序 我会收到此错误消息 远程服务器返回
  • 当赋值的类型可以容纳它时,为什么计算时会发生溢出,具体取决于数据类型

    早些时候我想出了一些东西 我解决了 但后来它让我 让我们看一下我正在做的类似的例子 int b 35000000 35million int a 30000000 unsigned long n 100 a b 输出 4294967260
  • 为什么我不能将 __getattr__ 与 Django 模型一起使用?

    我在网上看到过人们使用的例子 getattr 使用 Django 模型 但每当我尝试时都会出错 姜戈1 2 3 我使用的时候没有任何问题 getattr 在普通物体上 例如 class Post object def getattr sel