Каков наилучший способ создания "списка", связанного с моделью?
Я хочу иметь возможность связать название компании в моих моделях со списком процентных точек "вех", чтобы вычислить, как далеко каждая компания находится от ближайшей вехи.
Например:
List_Of_Milestones = [5, 10, 15, 20, 25]
Current_Progress = 9.5%
Пример вывода = "Компания А находится на расстоянии 0,5% от 10% рубежа и на 4,5% выше 5% рубежа"
Логика проста с точки зрения Python, но я не могу взять в толк, как мне создать это в модели и позволить пользователю установить свой собственный список этапов.
Я бы начал с двух моделей: Company
и Milestone
.
from django.contrib.auth.models import User
class Milestone(models.Model):
company = models.ForeignKey(on_delete=models.CASCADE)
title = models.CharField(max_length=20)
description = models.TextField()
percentage = models.DecimalField(max_digits=4, decimal_places=1)
class Company(models.Model):
name = models.CharField(max_length=30)
milestone_progress = models.DecimalField(max_digits=4, decimal_places=1)
@property
def milestone_status(self):
try:
next_milestone = self.milestones_set.filter(percentage__gt=milestone_progress).order_by('percentage').first()
return "This company is {} away from their next milestone".format(next_milestone.percentage-self.milestone_progress)
except:
return None
Между этими двумя моделями строится связь по внешнему ключу, что позволяет компании иметь много вех.
Используя "прокси" поле в модели Company
, вы можете получить все вехи для данной компании и сравнить их с полем компании milestone_progress
.
Наконец, вычитая процентное значение next_milestone
из прогресса, вы получите дельту. Затем это сведено в простой пример строки, но вы можете настроить его в соответствии с вашими собственными требованиями к представлению.