使用django在python中使用if-else语句

时间:2014-12-12 17:00:44

标签: python django

我是django / python的新手。 我正在尝试创建一个输出值的字段,具体取决于另一个字段的值。我已经浏览了整个互联网,但无法找到任何帮助我的东西。

我有一个python条件:

def _final(obj):  
    if obj.final > '40,000':  
        return obj.match_score == 1  
    elif obj.final >= '35,000' and obj.final <= '40,000':  
        return obj.match_score == 2  
    elif obj.final >= '30,000' and obj.final <= '35,000':  
        return obj.match_score == 3  
    else:  
        return None  

这就是我在django模型中定义2个字段的方式:

match_score = Derived(NumberField(null=True, default=None), _final)  
final = NumberField(blank=True, null=True, default=None)      

它会运行,但是当我为&#34; final&#34;输入一个数字时,它不会输出&#34; match_score&#34;

中的任何内容

感谢您的帮助。

编辑代码和缩进的格式

3 个答案:

答案 0 :(得分:5)

您需要设置值,而不是返回布尔值

def _final(obj):  
   if obj.final > '40,000':  
       obj.match_score = 1  
   elif obj.final >= '35,000' and obj.final <= '40,000':  
       obj.match_score = 2  
   elif obj.final >= '30,000' and obj.final <= '35,000':  
       obj.match_score = 3  

另外,对于我来说,你比较字符串(&#39; 40,000&#39;)而不是数字(40000 - 没有引号,没有逗号)看起来很可疑

答案 1 :(得分:0)

计算match_score是否更适合作为模型而不是字段的方法?

models.py

from django.db import models

class MyModel(models.Model):
    final = models.IntegerField(blank=True, null=True)

    def match_score(self):  
        if self.final > 40000:  
            return 1  
        elif self.final >= 35000 and self.final <= 40000:  
            return 2  
        elif self.final >= 30000 and self.final <= 35000:  
            return 3

模板

{{ obj.match_score }}

答案 2 :(得分:0)

这就是我解决问题的方法:

def _final(obj):  
if obj.final > 40000:  
    return 1  
elif obj.final >= 35000 and obj.final <= 40000:  
    return 2  
elif obj.final >= 30000 and obj.final <= 35000:  
    return 3  
else:  
    return 0  

这两个字段仍然以相同的方式定义。感谢您的贡献!