【问题标题】:Calculate DateTimeField() via variables通过变量计算 DateTimeField()
【发布时间】:2020-06-21 18:02:41
【问题描述】:

我是 python 新手,几天来我无法解决我的简单问题。

我有一个 Event 模型,它应该允许用户预订 timeslotroomevent type这将显示在时间表中。

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


【问题讨论】:

    标签: python django datetime python-datetime


    【解决方案1】:

    我将以下计算放在哪里?直接在models.py中?

    您可以将其添加到您的 models.py,但随着该模块的增长,您可能希望创建一个包含单独模块的 models 文件夹。

    如何处理正确的日期计算?

    你可以覆盖

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

    然后在那里进行计算。基本上它会在实际保存之前计算 start_time 和 end_time 然后保存它们。

    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)
    

    【讨论】:

    • 好的,谢谢!关于时间处理的另一件事:我应该从字符串创建 start_date 并解析它还是推荐“计算”(使用时间字段)?
    • 如果可以避免转化,那就这样做
    • 好的,试试这样:- start_date= get_date.replace(hour=7, minutes=30) 再次,感谢您的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2021-07-05
    • 2017-04-19
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多