Как в Django (Джанго) получить конечную дату путем сложения числа (интервала) и начальной даты

Я работаю инженером по метрологии в больнице, помогите написать логику. Есть две таблицы Pribor (Прибор) и PovPribor (СВЕДЕНИЯ О РЕЗУЛЬТАТЕ ПОВЕРКИ). У прибора устанавливается межповерочный интервал, чаще он 12 или 24 месяца, или как например у стеклянных колб, у которых нет межповерочный интервала (поверяется только один раз при выпуске изготовителем). Необходимо написать логику для подсчета поля "expiry_date" (Поверка действительна до).

  1. Если прибор «годен» рассчитать поле «Поверка действительна до» по формуле: МПИ (меж.пов.интервал) + Дата поверки – 1день.

Например: МПИ 12 месяцев, дата поверки 11.04.2025, соответственно Поверка действительна до 10.04.2026

  1. Если прибор «годен», а МПИ «нет» в поле «Поверка действительна до» написать «БЕССРОЧНАЯ»
  2. Если прибор «не годен» поле «Поверка действительна до» не рассчитывается, написать «- (прочерк)»

Делать это я хочу пока в админке и как я понимаю я должен написать, что то типо такого

def get_expiry():
    return datetime.today() + timedelta(days=14)

Код таблиц

from django.db import models
from datetime import datetime, timedelta


class Pribor(models.Model):
    """Таблица КАРТОЧКА ПРИБОРА"""
    title = models.CharField(verbose_name='Наименование прибора', max_length=30, null=True, blank=True)
    type = models.CharField(verbose_name='Тип СИ (модиф.)', max_length=30, null=True, blank=True)
    factory_number = models.CharField(verbose_name='Заводской номер', max_length=30, null=True, blank=True,
                                      db_index=True)
    MPI = [
        ('-', 'нет'),
        ('12', '1 год'),
        ('18', '1,5 года'),
        ('24', '2 года'),
        ('36', '3 года'),
        ('48', '4 года'),
        ('60', '5 лет'),
        ('72', '6 лет'),
    ]
    mpi = models.CharField(max_length=3, default='12', verbose_name='Межповерочный интервал', null=True, blank=False,
                           choices=MPI)

    class Meta:
        verbose_name = 'Карточка прибора'
        verbose_name_plural = 'Карточки приборов'
        ordering = ['-id', 'title']

class PovPribor(models.Model):
    """Таблица СВЕДЕНИЯ О РЕЗУЛЬТАТЕ ПОВЕРКИ СИ"""
    pribor = models.ForeignKey('Pribor', verbose_name='Прибор', on_delete=models.CASCADE, blank=False, null=True,)
    number_arhin = models.CharField(verbose_name='Номер свидетельства/извешения СИ', null=True, max_length=30,
                                    help_text='указать номер свидетельства/извещения с сайта ФГИС Аршин')
    link_arhin = models.URLField(verbose_name='Ссылка на сведения о результате поверки СИ')

    issue_date = models.DateField(verbose_name='Дата поверки СИ')
    expiry_date = models.CharField(verbose_name='Поверка действительна до', default=get_expiry)

    RESULT = [
        ('С', 'годен'),
        ('И', 'не годен'),
    ]

    result = models.CharField(max_length=1, default='С', verbose_name='Результат поверки', null=True,
                              blank=False, choices=RESULT)

    def __str__(self):
        return self.number_arhin

    class Meta:
        verbose_name = 'Сведения о поверке'
        verbose_name_plural = 'Сведения о повероках'
        ordering = ['-number_arhin']
Вернуться на верх