【问题标题】:Django-model: Save computed value in a model fieldDjango-model:将计算值保存在模型字段中
【发布时间】:2015-06-02 03:51:36
【问题描述】:

我想用计算字段保存 django 模型,以便我可以对其应用搜索。

class TestModel(models.Model):
    x = models.CharField(max_length=16)
    z = models.CharField(max_length=16)

    # I want a field like below and also saves in databse
    # computed =  computed()

    def computed(self):
        result = self.x + self.y
        return result

【问题讨论】:

    标签: python django django-models


    【解决方案1】:
    class TestModel(models.Model):
        x = models.CharField(max_length=16)
        z = models.CharField(max_length=16)
        computed = models.CharField(max_length=32, editable=False)
    
        def save(self, *args, **kwargs):
            self.computed = self.x + self.y
            super(TestModel, self).save(*args, **kwargs)
    

    Hereeditable 选项的作用。 More.

    【讨论】:

    • 如上所述,即使覆盖模型的保存方法也是一个可行的选择。
    【解决方案2】:

    首先,您必须在 TestModel 中定义“计算”字段。然后在创建新的 TestModel 记录时,可以在创建记录时计算 x + y 并保存。

    TestModel.objects.create(x=x_value, y=y_value, computed=(x_value + y_value))
    

    应该这样做。

    【讨论】:

    • 虽然这在原则上可行,但使用save() 更好,因为只有一部分代码用于计算值。如果从代码的多个部分调用create(),则每个部分都需要计算值。
    【解决方案3】:

    我们应该重写 save() 方法。

    class TestModel(models.Model):
        x = models.CharField(max_length=16)
        z = models.CharField(max_length=16)
        computed =  models.CharField(max_length=32)
    
        def get_computed(self):
            result = self.x + self.y
            return result
    
        def save(self, *args, **kwargs):
            self.computed = self.get_computed()
            super(TestModel, self).save(*args, **kwargs)
      
    

    【讨论】:

    • 为了让它更短,你可以简单地在你的保存方法中添加 self.x+self.y,而不是把它放在单独的方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2020-10-12
    • 2020-03-17
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多