django模型得到场方法

时间:2017-10-04 04:31:46

标签: python django django-rest-framework

我有一个要求,当访问django模型Price中的字段Lead时,我必须应用一些业务逻辑并更新价格。

我可以在Serializers / Views中完成。但是,这个对象可以通过多个视图访问,因此在几个地方都没有可行的设计。

所以我正在寻找一种可以像get_price(self)那样获得控制权的方式。

class Lead(models.Model):
    price = models.IntegerField(_('price'), default=10)

    def get_price(self):
    ''' Looking for something like this '''
    .. Logic ...
    return self.price
当任何序列化程序/视图访问此模型时,将调用

get_price。访问此模型时,问题是get_price未被调用。

2 个答案:

答案 0 :(得分:2)

您可以使用该类的属性方法。哪个将通过对象访问。您可以在序列化程序中包含这些字段。

class Lead(models.Model):
    price = models.IntegerField(_('price'), default=10)

   @property
   def total_price(self):
      ''' Looking for something like this '''
      .. Logic ...
      return self.price

现在您可以在序列化程序中包含total_prcie字段。

class LeadSerializer(serializers.ModelSerializer):
     class Meta:
          model = Lead
          fields = ('total_prize', )

答案 1 :(得分:0)

我以一种非常不同的方式完成了这项任务,我不得不创建另一个名为TrackLead Table的表来跟踪所做的更改。

稍后在__init__函数中,我在需要时更新了价格字段。我没有找到任何其他方法来完成它。然而它现在正在工作。