我正在创建一个包含医生档案的网站。如果医生请假,我想在页面上显示警报。例如,医生在9月1日至9月10日期间休假。如果有人在这些日期之间访问他的个人资料,则应显示休假警报。如何在数据库中添加所有信息?
目前我只有以下内容:
{% if doctor.onLeave %}
<div id="leave" class="alert alert-success">
<strong>On leave</strong>
</div>
{% endif %}
class Doctor(models.Model):
name = models.CharField(max_length=1300)
specialization = models.ForeignKey(Specialization)
onLeave = model.BooleansField(default = False)
def showDocProfile(request, id):
try:
doctor = Doctor.objects.get(id=id)
except Doctor.DoesNotExist:
raise Http404
return render(request, 'm1/profile.html', d)
答案 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_date
和leave_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_date
和leave_end_date
。如果已定义,则它将检查当前日期是否介于这两个日期之间并返回True
或False
。否则,它返回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