gpt4 book ai didi

python - 让 Django 将模型 id 包含在所有模型实例的字符串表示形式中以进行调试

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:10 26 4
gpt4 key购买 nike

Django 的模型 Model类定义了 __repr__方法将模型类名与实例的字符串表示形式相结合,以便典型的对象将以以下格式显示在 shell 或调试工具中:

<MyClass: string description of instance>

我想要的是我的所有对象实例都在其 __repr__ 中显示其 id ,例如

<MyClass 123: string description of instance>

这是为了调试方便。

现在,(原则上)很容易覆盖我的 __unicode__方法(生成实例的字符串描述)以包含 ids,或者就此而言覆盖我的 __repr__方法(或者让我的所有模型类都从这样做的基类派生)。

但是,我正在使用现有的代码库,并希望避免为此更改所有现有的模型类定义。改变事物的快速而肮脏的方法是编辑 __repr__ 的源代码在 Django 的 Model 类中。但这会产生部署问题,因为我的项目总是从 pip 部署第三方库,例如 Django。

那么:如何让 Django 将 id 包含在所有对象实例的 repr 中,而不更改 Django 源代码或我的项目模型类定义?

注意:我正在考虑对 Model.__repr__ 进行某种猴子补丁应该可以解决这个问题,但我不确定这是否可行,如果可行的话,在我的 Django 项目中的哪里可以做到这一点。

最佳答案

Monkeypatching Model.__repr__ 应该可以工作。像这样的东西:

def debug_repr(self):
return "<{} {}: {}>".format(self.__class__.__name__, self.pk, self)

Model.__repr__ = debug_repr

这是基于 the implementation在源代码中。

执行此操作的位置取决于您的调试设置。如果您在控制台中工作,则可以直接输入此内容。如果您想将其放入代码中但不干扰其他部署,您可能应该为调试环境创建一个新的设置文件,然后以这种方式触发猴子补丁。

关于python - 让 Django 将模型 id 包含在所有模型实例的字符串表示形式中以进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com