Django模型获取字段方法

3

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

我可以在序列化器/视图中完成。然而,由于该对象被多个视图访问,因此在多个位置编写代码不是可行的设计。

因此,我正在寻找一种方式,可以像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没有被调用。


在你的 get_price() 函数中,返回 self.price - MD. Khairul Basar
问题是当访问此模型时,get_price未被调用? - Seshadri VS
它不会自动调用。您必须显式地调用 get_price()。我不知道是否有任何方法在访问模型时被调用。 - MD. Khairul Basar
是的,这就是我找到的。如果它是一个序列化器,那么我们可以有一个方法。因此,在访问序列化器时,我们可以更新。但是用这种方式,我必须至少更新3个序列化器,这不是一个很好的设计。因此,我正在寻找Django模型。 - Seshadri VS
你想在访问潜在客户对象时更新价格字段吗? - Beomi
是的,我想在某人获取值时更新价格。但是如果有人设置它,它不会改变。 - Seshadri VS
2个回答

4
您可以使用类的 property 方法,通过对象进行访问。您只需将这些字段包含在序列化器中即可。
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', )

我对此没问题。但是这个解决方案唯一的问题是我们必须编辑序列化程序。我正在寻找的是一个不需要修改序列化程序的解决方案。由于该对象将被多个其他对象访问,因此希望将此逻辑放在一个地方。 - Seshadri VS

0

我用了一种非常不同的方式完成了这个任务,我不得不创建另一个名为TrackLead表来跟踪更改.

稍后在__init__函数中,我在需要时更新了价格字段。我没有找到任何其他完成它的方法。不过现在它已经可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接