这里还有很多其他问题,但都没有帮助。
我想要一个 yield 字段由 yield = starts/finishes 字段计算。我想使用 Highcharts 绘制它。
但是,当我通过管理门户添加对象时 - 它设置 yield = 0 并且不会计算。
模型.py:
class wYield(models.Model):
starts = models.PositiveIntegerField(default=0)
finishes = models.PositiveIntegerField(default=0)
## ONE: i've tried the below:
yield_num = model.FloatField()
def save(self, *args, **kwargs):
if self.starts > 0:
self.yield = self.finishes / self.starts
else:
self.yield = 0
super(wYield, self).save(*args, **kwargs)
## TWO: i've tried this but then I don't know how to see it in the Admin view:
def _set_yield(self):
if self.starts > 0:
x = self.finishes / self.starts
else:
x = 0
return x
yield_num = property(_set_yield)
## THREE: I think this works the same as TWO
@property
def yield_num(self):
if self.starts > 0:
return self.finishes / self.starts
else:
return 0
管理员.py:
from .models import wYield
class wYieldAdmin(admin.ModelAdmin):
list_display = ('starts', 'finishes', 'yield_num')
admin.site.register(wYield, wYieldAdmin)
请您参考如下方法:
弄明白了(在 AbhiP 的帮助下!)Python int 类型转换是罪魁祸首。愚蠢的问题!
下面是有效的,并允许我不保存计算字段(但显示它并使其像模型中的字段一样):
@property
def yield_num(self):
if self.starts > 0:
#needed the float() to cast it out of an int
return self.finishes / float(self.starts)
else:
return 0
