Как использовать данные, хранящиеся в модели Django, в вычислениях, а затем сохранять результаты расчета в поле модели Django? - PullRequest
0 голосов
/ 19 апреля 2019

Я работаю над своим первым приложением 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

Как я могу получить полученное значение и затем сохранить его в своей базе данных или сохранить его для использования в другом фрагменте логики?

Будет ли лучше использовать функцию класса в качестве метода?

Извините, если вопрос задают не очень хорошо, я новичок.

Любая помощь, если ценится!

1 Ответ

0 голосов
/ 19 апреля 2019

Да, вы можете добавить это как метод профиля. И / или если вы хотите сохранить результат под рукой, вы можете добавить другое поле в модель профиля и переопределить метод сохранения, чтобы он пересчитывался при каждом сохранении экземпляра. Примерно так:

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

Возможно, вам необходимо защититься от пропущенных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...