如何在计算中使用存储在Django模型中的数据,然后将计算结果存储在Django模型字段中?

时间:2019-04-19 17:35:33

标签: django python-3.x

我正在开发我的第一个Django应用,我需要获取用户在我的模型字段中输入的数据,将其插入到使用该数据进行计算的函数中,然后返回该计算的值到我的模型中,然后将其存储。

将结果存储在我的数据库中并不是必须的,但是稍后我将需要使用结果图来允许应用确定向用户呈现哪些数据。

我在models.py中有我的模型课:

class HWID
{

    public static bool HasKey()
    {

        if (!String.IsNullOrEmpty(Settings.Default.ID))
        {
            return true;
        }

        return false;
    }

    public static void Lock()
    {

        if (String.IsNullOrEmpty(Settings.Default.ID))
        {
            ManagementClass managClass = new ManagementClass("win32_processor");
            ManagementObjectCollection managCollec = managClass.GetInstances();

            foreach (ManagementObject managObj in managCollec)
            {
                var cpuInfo = managObj.Properties["processorID"].Value.ToString();
                Settings.Default.ID = cpuInfo;
                Settings.Default.Save();
                Settings.Default.Reload();
                break;
            }
        }
    }


    public static bool CompareKey()
    {
        var managClass = new ManagementClass("win32_processor");
        var managCollec = managClass.GetInstances();

        foreach (var managObj in managCollec)
        {
            var cpuInfo = managObj.Properties["processorID"].Value.ToString();
            if (cpuInfo == Settings.Default.ID)
            {
                return true;
            }
        }
        return false;
    }
}

和我在services.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)

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

我会更好地使用类中的函数作为方法吗?

很抱歉,我的问题还不是很好,我是一个新手。

如有帮助,请帮忙!

1 个答案:

答案 0 :(得分:0)

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

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