根据时间

时间:2015-08-29 13:04:06

标签: python django

我正在创建一个包含医生档案的网站。如果医生请假,我想在页面上显示警报。例如,医生在9月1日至9月10日期间休假。如果有人在这些日期之间访问他的个人资料,则应显示休假警报。如何在数据库中添加所有信息?

目前我只有以下内容:

profile.html

 {% if doctor.onLeave %}

    <div id="leave" class="alert alert-success">
      <strong>On leave</strong>
    </div>

  {% endif %}

models.py

class Doctor(models.Model):
    name = models.CharField(max_length=1300)
    specialization = models.ForeignKey(Specialization)
    onLeave = model.BooleansField(default = False)

views.py

def showDocProfile(request, id):
    try:
        doctor = Doctor.objects.get(id=id)
    except Doctor.DoesNotExist:
        raise Http404
 return render(request, 'm1/profile.html', d)

1 个答案:

答案 0 :(得分:0)

解决方案-1使用模型方法

您可以添加模型方法,而不是在模型中添加onLeave字段,该方法可以计算医生是否休假并返回布尔值。

def onLeave(self):
    # check if current date lies between time period of leave 
    # Add your logic here to get the time period for which doctor is on leave
    if datetime.now() in <on_leave_time_period>:
        return True 
    return False

解决方案-2使用属性

另一种选择是在模型中添加leave_start_dateleave_end_date字段,然后添加一个属性onLeave ,如果医生在休假时使用这些字段进行计算2个领域。

leave_start_date = models.DateTimeField(null=True, blank=True)
leave_end_date = models.DateTimeField(null=True, blank=True)

@property
def onLeave(self):
    if self.leave_start_date and self.leave_end_date:
        return self.leave_start_date < datetime.now() < self.leave_end_date
    return False

该属性将检查是否为对象定义了leave_start_dateleave_end_date。如果已定义,则它将检查当前日期是否介于这两个日期之间并返回TrueFalse。否则,它返回False

编辑:(感谢@Nizam

如果假期总是一整天,也可以使用models.DateField,即不涉及时间。如果有半天的选项,那么您可以将上述代码与models.DateTimeField一起使用。

以上代码将改为:

leave_start_date = models.DateField(null=True, blank=True) # a date field
leave_end_date = models.DateField(null=True, blank=True) # a date field

@property
def onLeave(self):
    if self.leave_start_date and self.leave_end_date:
        return self.leave_start_date <= date.today() <= self.leave_end_date
    return False