Skip to main content
 首页 » 编程设计

python之从其他字段计算的 Django 模型字段

2025年05月04日22jirigala

这里还有很多其他问题,但都没有帮助。

我想要一个 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