python - 即使我更改设置器,带有设置器的 Django 字段也不会更新
问题描述
首先,我将提供我的项目/我遇到的问题的背景。问题在最后,因为首先使用信息更有意义。感谢您的阅读。
我有一个基于跟踪股票数据的 Django 模型。我在这个模型中做的第一件事是根据来自 Article 模型的数据为我的 Equity 模型的实例分配一个分数。
def fundamental_list(self):
l_fund = []
filtered_articles = Article.objects.filter(equity__industry = self.industry)
for filtered_article in filtered_articles:
if(filtered_article.equity.equity_name == self.equity_name):
l_fund.append([filtered_article.get_fun_score(), filtered_article.get_date(), filtered_article.id, filtered_article.title, filtered_article.get_source(), filtered_article.is_this_month()])
else:
if (filtered_article.read_through == -1):
l_fund.append([float(-1)*filtered_article.get_fun_score(), filtered_article.get_date(), filtered_article.id, filtered_article.title, filtered_article.get_source(), filtered_article.is_this_month()])
if (filtered_article.read_through == 1):
l_fund.append([filtered_article.get_fun_score(), filtered_article.get_date(), filtered_article.id, filtered_article.title, filtered_article.get_source(), filtered_article.is_this_month()])
return l_fund
然后,我最初为我的 Equity 分配了一个 weighted_score,如下所示(以便对它们进行排名)。
weighted_strength_minus = models.FloatField(db_column='weighted_strength_minus', default=0)
def set_weighted_strength_minus(self):
sys.stdout.flush()
weight = 0.40
fundamental_data = self.fundamental_list()
sentiment_data = self.sentiment_list()
num_entries = len(fundamental_data)
if (num_entries != 0):
total = 0
for i in range(num_entries):
total += (weight**i)*(fundamental_data[i][0]-sentiment_data[i][0])
total = total*(1-weight)/(1-weight**num_entries)
self.weighted_strength_minus = total
return total
else:
self.weighted_strength_minus = 0
return 0
然而,这个 weighted_strength 包含了太多的数据,我只想在我的排名函数中使用过去两周的数据。所以我在文章中创建了以下函数:
def is_this_month(self):
date = self.entry_date_time
if (datetime.datetime.now(timezone.utc) - date < datetime.timedelta(days=14)):
return True
else:
return False
(请注意,上述函数在 basic_score 中引用)。然后我创建了一个新的 weighted_strength 设置函数,如下所示:
def set_weighted_strength_minus(self):
sys.stdout.flush()
weight = 0.40
fundamental_data = self.fundamental_list()
sentiment_data = self.sentiment_list()
num_entries = 0
for item in fundamental_data:
if(item[-1] == True):
num_entries += 1
if (num_entries != 0):
total = 0
for i in range(num_entries):
total += (weight**i)*(fundamental_data[i][0]-sentiment_data[i][0])
total = total*(1-weight)/(1-weight**num_entries)
self.weighted_strength_minus = total
return total
else:
self.weighted_strength_minus = 0
return 0
然而,weighted_scores 是完全一样的。我什至尝试过设置 self.weighted_strength_minus = num_entries 之类的东西,但 weighted_strength 的结果仍然完全相同(因此排名也是如此)。由于某种原因,我在函数中所做的任何更改似乎都没有真正进行。
任何人都可以解释发生了什么以及为什么,或者提供一个解决方案,这样我就可以看到过去两周数据的 weighted_strength。请注意,我在 Django 相对较新,但我对此感到非常困惑!
解决方案
推荐阅读
- bitbucket-pipelines - How to setup deployment to the remote SSH server using pipelines
- firebase - 如何从 FCM 主题获取客户端 FCM 令牌
- javascript - 使用 Woocommerce 中的 jQuery 计算价格更新购物车价格
- swagger - 使用 Swagger 加载 API 定义 500 内部服务器错误失败
- c++ - 运算符一元重载函数
- batch-file - 批处理文件:如何在不关闭命令提示符的情况下执行 cmd 命令?
- android - 在 Android 中使用画布和路径创建自定义视图
- r - 如何从 R 的表格中计算百分比
- c# - 如何通过 cmake w/o 资源文件为 C# Windows Forms 应用程序设置图标?
- javascript - 如何在 jquery 对话框表中正确显示从 php 接收到的数据