首页 > 解决方案 > 即使我更改设置器,带有设置器的 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 相对较新,但我对此感到非常困惑!

标签: pythondjangodjango-modelsdjango-viewsdjango-templates

解决方案


推荐阅读