django - 如何在计算中使用存储在 django 模型中的数据,然后将计算结果存储在 django 模型字段中?
问题描述
我正在开发我的第一个 Django 应用程序,我需要获取用户在我的模型字段中输入的数据,将其插入到使用该数据进行计算的函数中,然后将该计算的值返回给我的模型然后存储在哪里。
将结果存储在我的数据库中并不是必需的,但是稍后我将需要使用结果图来允许应用程序确定要向用户呈现哪些数据。
我在models.py中有我的模型类:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
age = models.IntegerField(default=18)
gender = models.CharField(max_length=6, choices=gend, default='')
weight = models.IntegerField(default=0)
height = models.IntegerField(default=0)
和我在 services.py 文件中的函数:
def caloriefunction():
weight = Profile.weight
height = Profile.height
age = Profile.age
isMale = Profile.gender
if isMale == "Male":
isMale = True
elif isMale == "Female":
isMale = False
else:
print("Error")
quit()
if isMale:
bmr = 66.5 + (13.75 * weight) + (5 * height) - (6.755 * age)
else:
bmr = 655.1 + (9.6 * weight) + (1.8 * height) - (4.7 * age)
bmr = round(bmr)
return bmr
我将如何获得结果值,然后将其存储在我的数据库中或保留它以在另一段逻辑中使用?
将类中的函数用作方法会更好吗?
对不起,如果这个问题没有很好地被问到,我是一个新手。
如果感谢任何帮助!
解决方案
是的,您可以将其添加为 Profile 的方法。和/或如果您想方便地保存结果,您可以向配置文件模型添加另一个字段,并覆盖 save 方法,以便在保存实例时重新计算它。像这样的东西:
def save(self, *args, **kwargs):
self.update_bmr()
super().save(*args, **kwargs)
def update_bmr(self):
if self.gender == "Male":
self.bmr = (
66.5
+ (13.75 * self.weight)
+ (5 * self.height)
- (6.755 * self.age)
)
elif self.gender == "Female":
self.bmr = (
655.1
+ (9.6 * self.weight)
+ (1.8 * self.height)
- (4.7 * self.age)
)
else:
self.bmr = None
您可能需要防止丢失数据。
推荐阅读
- ios - 按名称从数组中获取数据 - swift
- typescript - 如何处理泛型中的函数重载
- linkedin - 是否可以通过 API 搜索帐户并根据其公司网站获取关注者?
- python - 在 Numpy 中删除空行的精明方法
- unity3d - 在实例化对象的脚本中获取 Prefab - Unity 2D
- java - 使用 squareup.wire 在 proto 中获取 nestedTypes 的原始模式
- sql-server - 触发器适用于 UPDATE/INSERT,但在通过 BCP 运行时失败(日期格式问题)
- javascript - 将鼠标光标悬停在左列的滚动条上时保存右列的内容
- perl - ld:无法识别的选项'-Wl,-O1'
- amazon-web-services - AWS QuickSight:将视觉对象连接到多个数据集