Django модель: сумма в деф. - PullRequest
2 голосов
/ 12 июля 2020

Как суммировать поля в модели? У меня есть 2 целочисленных поля, и я хочу суммировать их по умолчанию, если это возможно?

class Blank_list(models.Model):
    expert = models.ForeignKey(Expert, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    employee = models.ForeignKey(Employee, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    c8_lvl_aw1 = models.IntegerField('К8: 1', choices=ANSWER_TYPES, default=0, blank=0)
    c8_lvl_aw2 = models.IntegerField('К8: 2', choices=ANSWER_TYPES, default=0, blank=0)
    
    def __str__(self):
        return "%s произвел оценку следующего сотрудника: %s" % (self.expert, self.employee)

    #that example what i'm expect
    def sum_all_fields(self):
        sum = c8_lvl_aw1 + c8_lvl_aw2 
        return sum

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы можете использовать self аналогично Python классу для получения значений Model:

class Blank_list(models.Model):
    expert = models.ForeignKey(Expert, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    employee = models.ForeignKey(Employee, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    c8_lvl_aw1 = models.IntegerField('К8: 1', choices=ANSWER_TYPES, default=0, blank=0)
    c8_lvl_aw2 = models.IntegerField('К8: 2', choices=ANSWER_TYPES, default=0, blank=0)
    
    def __str__(self):
        return "%s произвел оценку следующего сотрудника: %s" % (self.expert, self.employee)

    
    def get_sum_of_fields(self):
        sum_value = self.c8_lvl_aw1 + self.c8_lvl_aw2 
        return sum_value
1 голос
/ 12 июля 2020

В настоящее время оба поля имеют одинаковое имя. Вам следует переименовать одно из двух, например второе, в c8_lvl_aw1. Затем вы можете суммировать self.c8_lvl_aw1 и self.c8_lvl_aw2:

class Blank_list(models.Model):
    expert = models.ForeignKey(Expert, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    employee = models.ForeignKey(Employee, null=True, on_delete=models.SET_NULL, related_name='blank_list')
    c8_lvl_aw1 = models.IntegerField('К8: 1', choices=ANSWER_TYPES, default=0, blank=0)
    <b>c8_lvl_aw2</b> = models.IntegerField('&#1050;8: 2', choices=ANSWER_TYPES, default=0, blank=0)
    
    def __str__(self):
        return "%s &#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1077;&#1083; &#1086;&#1094;&#1077;&#1085;&#1082;&#1091; &#1089;&#1083;&#1077;&#1076;&#1091;&#1102;&#1097;&#1077;&#1075;&#1086; &#1089;&#1086;&#1090;&#1088;&#1091;&#1076;&#1085;&#1080;&#1082;&#1072;: %s" % (self.expert, self.employee)

    #that example what i'm expect
    def sum_all_fields(self):
        return <b>self.c8_lvl_aw1 + self.c8_lvl_aw2</b>

Примечание : обычно модели Django, как и все классы в Python, получают имя в PerlCase , а не snake_case, поэтому должно быть: BlankList вместо Blank_list.

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