我该如何在一个模型上创建动态字段?
假设我正在开发与股票市场有关的应用程序。我在某一天购买了股票,过了一段时间后我想根据今天的价格检查收益(或亏损)。我会有一个像这样的模型:
class Purchase(models.Model):
ticker = models.CharField(max_length=5)
date = models.DateField()
price = models.DecimalField(max_digits=20, decimal_places=3)
quantity = models.IntegerField()
我希望能定义一个类似于这样的模型:
class PurchaseGain(Purchase):
gain = models.DecimalField(max_digits=20, decimal_places=3)
class Meta:
proxy = True
为了能够做到这一点:
todays_price = get_price_from_webservice(ticker)
for p in PurchaseGain.objects.get_purchase_gain(todays_price):
print '%s bought on %s for a gain of %s' % (p.ticker, p.date, p.gain)
在获取购买收益时,p.gain是根据输入动态计算的。我希望使用模型来构建字典,因为我想将其传递并生成表单,保存更改等。
我尝试创建一个派生的QuerySet,但这导致了循环依赖,因为Purchase需要知道QuerySet(通过自定义管理器),而QuerySet返回一个迭代器,需要实例化一个从Purchase派生的PurchaseGain。
我有哪些选项?
谢谢, Craig
@property
装饰器,这样你只需将其称为p.gain
。 - Daniel Roseman