gpt4 book ai didi

同一文件中的 Python 和 Django 模型看不到对方

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

class B(models.Model):
whatever = models.TextField(blank=True)

@staticmethod
def are_we_ok():
return False

class A(models.Model)
text = models.TextField(blank=True)

@staticmethod
def is_everything_ok():
if not B.are_we_ok():
raise B.DoesNotExist




A.is_everything_ok()

为什么会出现错误:

File "asdf/models.py", line x, in is_everything_ok
if not B.are_we_ok():

AttributeError: 'NoneType' object has no attribute 'are_we_ok'

但是如果我这样做:

class A(models.Model)
text = models.TextField(blank=True)

@staticmethod
def is_everything_ok():
from asdf.models import B
if not B.are_we_ok():
raise B.DoesNotExist

它有效。这对我来说没有任何意义。这是巨大 Django 应用程序的一部分。知道什么样的情况会导致这种情况吗? (例如,循环依赖是否可能?)

更新:

我忘了说的是,这段代码已经在生产环境中运行了四年,没有任何问题。最近的一些不相关编辑触发了这个错误。

最佳答案

@staticmethod替换为@classmethod。使用 staticmethod,self 或类都不会作为第一个参数传递,这就是您不能调用该方法的原因。

如果切换,则需要将类添加为函数的第一个参数:

class B(models.Model):
whatever = models.TextField(blank=True)

@classmethod
def are_we_ok(cls):
return False

参见:What is the difference between @staticmethod and @classmethod in Python?获取更多信息。

关于同一文件中的 Python 和 Django 模型看不到对方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097082/

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