【发布时间】:2021-05-09 06:28:18
【问题描述】:
我是 Python 和 Django 的新手,我正在努力寻找以全局变量的值为条件从 Django 模型“返回”的方法。
更具体地说,我正在设计一个应用程序来对用户/访问者进行采访。在采访中,向用户提出的问题可以是过去时或现在时。这取决于我从用户那里获得选择的介绍视图,即“过去”或“现在”。
我的模特是
class Question(models.Model):
key = models.CharField(max_length=50)
value = models.CharField(max_length=50)
question_text_past = models.CharField(max_length=2000)
question_text_now = models.CharField(max_length=2000)
def __str__(self):
global TENSE
if TENSE == 'past':
return self.question_text_past
else:
return self.question_text_now
但是,无论我尝试了什么(在 shell 中测试代码时),我的模型都没有反映 TENSE 值的变化。模型返回“未定义”错误。我还尝试将 TENSE 放入模块 globals.py 并将其导入到我的 models.py 中,但没有成功。我可能遗漏了一些关于 Django 的简单但基本的东西,所以我很感激任何帮助。
【问题讨论】:
-
请不要使用全局变量,全局状态是最严重的反模式之一:它使测试和扩展应用程序变得非常困难,并使视图变得不可预测.
-
Willem 指出,不建议使用全局变量。最好在 settings.py 中定义一个变量并在需要时使用该变量,或者如果您预见到该变量会动态变化,请考虑 django constance。
-
谢谢。我现在了解使用全局变量的缺点。在我的项目中,我迭代一个视图“采访”以获取用户的响应,该响应决定了视图要呈现的下一个问题。为此,“采访”视图必须以某种方式“记住”上一次迭代中的一些值以及时态变量。全局变量的最佳替代方案是什么?
标签: python django model global