[英]if-else statement in python with 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)
它可以运行,但是当我输入“ final”的数字时,“ match_score”中没有任何输出
谢谢你的帮助。
编辑代码和缩进的格式
您需要设置值,而不是返回布尔值
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
另外,对您来说,您将其与字符串('40,000')而不是数字进行比较(40000-不加引号,不带逗号),对我来说似乎很可疑
计算出match_score
是否会更适合作为模型上的方法而不是字段?
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 }}
这就是我解决问题的方法:
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
这两个字段的定义方式相同。 感谢您的贡献!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.