Как в Django (Джанго) получить конечную дату путем сложения числа (интервала) и начальной даты
Я работаю инженером по метрологии в больнице, помогите написать логику. Есть две таблицы Pribor (Прибор) и PovPribor (СВЕДЕНИЯ О РЕЗУЛЬТАТЕ ПОВЕРКИ). У прибора устанавливается межповерочный интервал, чаще он 12 или 24 месяца, или как например у стеклянных колб, у которых нет межповерочный интервала (поверяется только один раз при выпуске изготовителем). Необходимо написать логику для подсчета поля "expiry_date" (Поверка действительна до).
- Если прибор «годен» рассчитать поле «Поверка действительна до» по формуле: МПИ (меж.пов.интервал) + Дата поверки – 1день.
Например: МПИ 12 месяцев, дата поверки 11.04.2025, соответственно Поверка действительна до 10.04.2026
- Если прибор «годен», а МПИ «нет» в поле «Поверка действительна до» написать «БЕССРОЧНАЯ»
- Если прибор «не годен» поле «Поверка действительна до» не рассчитывается, написать «- (прочерк)»
Делать это я хочу пока в админке и как я понимаю я должен написать, что то типо такого
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']