【问题标题】:Calculate weighted score from Salesforce data in Django从 Django 中的 Salesforce 数据计算加权分数
【发布时间】:2019-09-01 15:40:04
【问题描述】:

我希望将我的网站与 Salesforce 相关联,并查看显示用户在 Salesforce 中的活动细分的视图,然后根据分配给每个活动的权重计算总分。我正在使用 Django-Salesforce 来启动连接并扩展 Activity 模型,但我不确定我是否正确设置了 Activity 或OverallScore 类。

以下是我已有的代码。根据我看到的其他类似问题,建议的结果似乎是自定义保存方法,但我担心我的数据库会很快变得庞大,因为连接每 5 分钟刷新一次。

我最大的问题是如何设置 Activity 类的“weighted_score”属性,因为我怀疑我目前所拥有的是否正确。

class Activity(salesforce.models.Model):
    owner = models.ManyToManyField(Profile)
    name = models.CharField(verbose_name='Name', max_length=264, 
           unique=True)
    weight = models.DecimalField(verbose_name='Weight', decimal_places=2, 
         default=0)
    score = models.IntegerField(verbose_name='Score', default=0)
    weighted_score = weight*score

    def __str__(self):
        return self.name


class OverallScore(models.Model):
    factors = models.ManyToManyField(Activity)
    score = Activity.objects.aggregate(Sum('weighted_score'))

    def __str__(self):
        return "OverallScore"

理想的最终结果是每个登录的用户都能“实时”查看他们的活动分数和一个总分数,该分数每 5 分钟从 Salesforce 连接刷新一次,然后在一天结束时我会运行一个 cron将日终结果保存到数据库的作业。

【问题讨论】:

    标签: python django django-salesforce


    【解决方案1】:

    请原谅迟到的部分回答,只对清楚的部分问题。

    weighted_score 中对字段的算术实现取决于您的偏好,如果您更喜欢 Django 端或 Salesforce 端的表达式。

    最简单但非常有限的解决方案是在方法上使用@property 装饰器。

    class Activity(salesforce.models.Model):
        ... # the same fields
        @property
        def weighted_score(self)
            return self.weight * self.score
    

    这可以在 Python 代码中用作 self.weighted_score,但它不能以任何方式传递给 SOQL,而且它不会比在同一个地方写更长的 (self.weight * self.score) 更强大。

    Salesforce SOQL 不支持 SELECT 子句中的算术表达式,但您可以在 Activity 对象的 Salesforce 设置中定义自定义“公式”字段,并将其用作 Django 中的普通数字只读字段。如果活动是任何其他 Salesforce 对象的主从关系,您可以在该对象上应用非常快速的求和、最大值或平均值公式。

    ManyToMany 字段需要在 Salesforce 设置中手动创建绑定对象,并将其分配给 ManyToMany 字段的 through 属性。 wiki Foreign Key Support 上有一个示例。根据经验,您的对象定义必须首先存在于 Salesforce 中,并具有有用的关系(可以是查找关系或查找关系)和可管理的数据结构。然后您可以运行python manage.py inspectdb --database=salesforce ... table names(可选地,使用的表的 API 名称列表,以空格分隔)这是修剪许多不必要的字段和选择的大量代码,但仍然比询问某人更容易且可靠。 Salesforce 没有特殊形式的自定义ManyToMany 关系,因此所有内容都由Models.py 中的ForeignKey 编写。 Master-Detail 只是对 ForeignKey 的注释。您终于可以手动创建一个 ManyToMany 字段,但它主要只是一个语法糖,通过“through=”绑定对象上的两个外键进行正向和反向遍历具有很好的助记符名称。

    (其余的问题对我来说太宽泛且不清楚。)

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多