Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型实例非零覆盖被忽略_Python_Django_Django Reversion - Fatal编程技术网

Python Django模型实例非零覆盖被忽略

Python Django模型实例非零覆盖被忽略,python,django,django-reversion,Python,Django,Django Reversion,我试图覆盖一个模型实例的\uuuu非零,因此它的计算结果为False 我首先在一个简单的Python类上进行了测试: >>> class A(): ... pass ... >>> a = A() >>> a.__nonzero__ = lambda: False >>> b = A() >>> bool(a) False >>> bool(b) True >>>

我试图覆盖一个模型实例的
\uuuu非零
,因此它的计算结果为
False

我首先在一个简单的Python类上进行了测试:

>>> class A():
...     pass
... 
>>> a = A()
>>> a.__nonzero__ = lambda: False
>>> b = A()
>>> bool(a)
False
>>> bool(b)
True
>>> type(a).__nonzero__(a)
False
>>> type(b).__nonzero__(b)
True
这表明被覆盖的
\uuu非零
成功地改变了对象的
bool()
计算

然后我尝试将同样的东西应用到django模型对象(本身从'django.db.models.Manager'继承的
feincms.module.page.page
实例)

但其计算结果为
True

(Pdb) obj
<Page: test>
(Pdb) bool(obj)
True
(Pdb)obj
(Pdb)布尔(obj)
真的

是否有我不知道的可能导致这种行为的原因?

在本例中,您使用的是旧式类。模型实例是一个新型的类

class B(object): pass
b = B()
b.__nonzero__ = lambda: False
bool(b) # True
显然,您不能覆盖实例的特殊方法,只能覆盖类型

B.__nonzero__ = lambda self: False
bool(b) # False

阅读以下SO问题以获取示例和更详细的解释:

这很不幸。不过谢谢你的回答,我不知道旧/新风格的课程有什么不同。我最终以另一种方式解决了我的问题(我想这比重写表单方法要好得多)。
B.__nonzero__ = lambda self: False
bool(b) # False