Django - Создание ключей, включающих вычисляемые поля, которые не сохраняются в базе данных

У меня есть ряд связанных таблиц, созданных на сайте django. В таблице пользователей есть вычисляемое поле, которое классифицирует людей в зависимости от их возраста. Эта классификация меняется по мере того, как человек становится старше, поэтому я не хочу сохранять это значение в базе данных (если только оно не может автоматически обновляться по мере достижения возрастных границ). Этот код возраста должен использоваться как часть ключа для связи с полями в другой таблице. Таблица классификации берет значение 1 и значение 2 из таблицы Score и код возраста из расчета в таблице User, которая сама получает код из таблицы Age. Они обеспечивают уникальный код, который таблица классификации использует для предоставления значения обратно в таблицу Score.[Схематическое изображение таблиц здесь][1]

Я смог получить значения для таблицы очков, сами ссылки на другие таблицы, просто получение вычисленного значения обратно из таблицы User оказывается проблемой. Я не очень хочу сохранять код возраста обратно в таблицу User, если только он не может быть автоматически обновлен при пересечении возрастной границы.

Любая помощь будет очень признательна

Вот модели, которые я создал на данный момент

class User(AbstractUser): GENDER_CHOICES = ( ('F', 'Female',), ('M', 'Male',), ) gender = models.CharField(max_length=6, choices=GENDER_CHOICES) DoB = models.DateField(verbose_name="Date of Birth", null=True, help_text="Дата рождения должна иметь форму dd/mm/yyyy")

def calculate_age(self):
    return int((datetime.now().date() - self.DoB).days / 365.25)
age = property(calculate_age) 

def calculate_shootingas(self):
    if self.gender == 'F':
        if self.age >= 18:
            return 1
        elif self.age <= 18 and self.age >= 17:
            return 2
        elif self.age <= 16 and self.age >= 15:
            return 3
        elif self.age <= 14 and self.age >= 13 :
            return 4
        elif self.age <= 12:
            return 5
    if self.gender == 'M':
        if self.age >= 18:
            return 6
        elif self.age <= 18 and self.age >= 17:
            return 7
        elif self.age <= 16 and self.age >= 15:
            return 8
        elif self.age <= 14 and self.age >= 13:
            return 9
        elif self.age <= 12:
            return 10
shooting = property(calculate_shootingas)
pass

class Score(models.Model): archer = models.ForeignKey('User', related_name='scores', on_delete=models.CASCADE) rndname = models.ForeignKey('Round', related_name='round', verbose_name=("Round Name"), on_delete=models.CASCADE) shootingas = models.ForeignKey('Age', related_name='shootingas', verbose_name='Shooting as', on_delete=models.CASCADE) bowtype = models.ForeignKey('BowType', related_name='bowtypes', on_delete=models.CASCADE) score = models.IntegerField(default='') dateshot = models.DateField(verbose_name="Date Round Shot", default=timezone.now) created_date = models.DateTimeField(default=timezone.now) classindex = models.CharField(max_length =10, default='') classification = models.CharField(max_length=20, default='Unclassified', blank=True)

def index(self):
    return str(self.shootingas_id) + str(self.rndname_id) + str(self.bowtype.id)
index = property(index)
Вернуться на верх