首页 > 解决方案 > 如何在计算中使用存储在 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

我将如何获得结果值,然后将其存储在我的数据库中或保留它以在另一段逻辑中使用?

将类中的函数用作方法会更好吗?

对不起,如果这个问题没有很好地被问到,我是一个新手。

如果感谢任何帮助!

标签: djangopython-3.x

解决方案


是的,您可以将其添加为 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

您可能需要防止丢失数据。


推荐阅读