Каков наилучший способ создания "списка", связанного с моделью?

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

Например:

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 из прогресса, вы получите дельту. Затем это сведено в простой пример строки, но вы можете настроить его в соответствии с вашими собственными требованиями к представлению.

Вернуться на верх