【问题标题】:Operations between django objectsdjango对象之间的操作
【发布时间】:2018-06-25 05:04:37
【问题描述】:

我正在尝试在 2 个 django 对象之间执行操作。你能建议如何进行吗?

我有 2 个对象

class v_Sale(models.Model):
    Key_Variable=models.CharField(max_length=255,primary_key=True)
    Sales = models.CharField(max_length=255)

class v_Threshold(models.Model):
    Key_Variable=models.CharField(max_length=255,primary_key=True)
    Threshold = models.CharField(max_length=255)

我想计算 (Sales-Threshold) 并将其保存在一个新变量中。

【问题讨论】:

  • 好的,有什么问题?
  • 在我看来,我正在做以下事情。 db_Sale=v_Sale.objects.all() db_Threshold=v_Threshold.objects.all()。但是当我尝试编写操作代码时,我收到错误“异常值:*:'QuerySet'和'QuerySet'不支持的操作数类型”
  • 您似乎忽略了描述“操作”(您应该在更新问题时这样做,而不是评论)。但是这个错误还不足以告诉你吗?查询集是对象的集合;您打算如何处理两个单独的集合?
  • 所以,我想根据作为主键的 Key_Variable 进行减法......像这样......(x=db_Sale - db_Threshold)
  • Key_Variable 在两个模型类中都是字符串。你不能在 python 中减去字符串。还请遵循 python 编码约定:snake_case 用于属性和方法,PascalCase 用于类。

标签: django orm


【解决方案1】:

您可以覆盖魔术方法(__add____sub__ 或任何您需要的方法),让它们做您需要的事情。
示例:

class v_Sale(models.Model):
    Key_Variable=models.CharField(max_length=255,primary_key=True)
    Sales = models.CharField(max_length=255)

    def __add__(self, other):
        return eval(self.Sales.value + " + " + other.Threshold.value)


class v_Threshold(models.Model):
    Key_Variable=models.CharField(max_length=255,primary_key=True)
    Threshold = models.CharField(max_length=255)

【讨论】:

  • 这没有回答问题,顺便说一句很不清楚。
  • 看不懂怎么能说不回答呢?
  • OP 谈到减法。您的eval 应该评估添加。顺便说一句,使用eval 不是最佳做法。我想知道你是如何弄清楚 OP 真正想要(或需要)什么的。
  • 我只是提供一个例子,我知道 eval 不是好的做法,但它展示了魔术方法是如何工作的。我本可以写“做某事”或其他无关紧要的东西,我希望这就是 OP 的意思,并希望它能帮助他。
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 2013-07-12
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2010-10-15
  • 2021-04-23
相关资源
最近更新 更多