Вычислить DateTimeField () через переменные - PullRequest
0 голосов
/ 09 марта 2020

Я новичок в python и уже несколько дней не могу решить мою простую проблему.

У меня есть модель Event , которая должна позволять пользователю забронировать временной интервал , номер и тип события , который будет показан в расписании.

class Event(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()
    get_date = models.DateTimeField()      # set via form, has year and day
    start_time_choices = [('1', '07:30'), ('2', '07:45'), ('3', '08:00'), ('4', '08:15'), ('5', '08:30')]
    timeslots = models.TimeField(
        choices=start_time_choices,
        "%H:%M",
        default='1',
        null=True)
    room_choices = [('1', 'Room 1'), ('2', 'Room 2'), ('3', 'Room 3'), ('4', 'Room 4'), ('5', 'Room 5')]
    room = models.CharField(
        choices=room_choices,
        max_length=1,
        default='1',
        null=True)
    event_choices = [('1', 'Event A'), ('2', 'Event B')]      # A is 15min long, B is 30min long
    events= models.CharField(
        choices=event_choices,
        max_length=1,
        default='1',
        null=True)

Теперь я хочу вычислить start_time и end_time для этого события, которое используется для представления календаря

  • Куда мне добавить следующие вычисления? Непосредственно в models.py?
  • Как мне правильно рассчитать дату?
# this is not a real code

    @property
    def date_calc(self):
        start_date = get_date + timeslots      # Year & Day + Hour & Min

        if events == "Event A":
          end_date = start_date + "00:15"
        else:
          end_date = end_date + "00:30"

        return start_time, end_time


1 Ответ

0 голосов
/ 09 марта 2020

Куда мне поставить следующий расчет? Непосредственно в models.py?

Вы можете добавить его в models.py, но по мере роста этого модуля вы можете создать папку models с отдельными модулями.

Как мне правильно рассчитать дату?

Вы можете перезаписать

def save(self, *args, **kwargs):

И выполнить там вычисления. Обычно он вычисляет время начала и окончания до фактического сохранения, а затем сохраняет их.

def save(self, *args, **kwargs):
    start_date = get_date + timeslots      # Year & Day + Hour & Min

    if events == "Event A":
      end_date = start_date + "00:15"
    else:
      end_date = end_date + "00:30"

    super(Event, self).save(*args, **kwargs)
...