代码之家  ›  专栏  ›  技术社区  ›  akv

在Django Model/Python类中创建派生属性有简单的方法吗?

  •  4
  • akv  · 技术社区  · 16 年前

    每个Django模型都有一个默认的主键 id 自动创建。我希望模型对象具有另一个属性 big_id 其计算公式为:
    big_id = id * SOME_CONSTANT

    big_id 作为 model_obj.big_id big_id .

    3 回复  |  直到 16 年前
        1
  •  8
  •   shylent    16 年前

    好吧,django模型实例只是python对象,至少有人告诉我:P

    我会这样做:

    class MyModel(models.Model):
        CONSTANT = 1234
        id = models.AutoField(primary_key=True) # not really needed, but hey
    
        @property
        def big_id(self):
            return self.pk * MyModel.CONSTANT
    

        2
  •  1
  •   shanyu    16 年前
    class Person(models.Model):
        x = 5
        name = ..
        email = ..
        def _get_y(self):
            if self.id:
                return x * self.id        
            return None
        y = property(_get_y)  
    
        3
  •  0
  •   Matt Baker    16 年前

    我现在能想到两个选择:

    1. 由于您不希望数据库中的字段,因此最好在模型上定义一个返回self.id*SOME_CONSTANT的方法,假设您将其称为big_id()。您可以随时通过yourObj.big_id()访问此方法,它将在模板中以yourObj.big_id的形式提供(您可能想了解django模板中的“魔点”)。
    2. 如果你不介意它在数据库中,你可以重写对象上的save方法来计算id*SOME_CONSTANT并将其存储在big_id字段中。这将使您不必每次都计算它,因为我假设ID不会改变