Объединение сегодняшней даты и ввода type=time в поле DateTimeField в Django
Здесь я использую Django 3.0 и Python 3.7
Здесь я получаю время из шаблона django и мне нужно объединить это время и сегодняшнюю дату и сохранить это в базе данных как DateTimeField
Вот мой models.py
class WorkTime(models.Model):
client = models.ForeignKey(Client,on_delete=models.CASCADE)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
total_time = models.TimeField(blank=True, null=True)
Вот мой views.py
class AddWorkTimeView(View):
def get(self, request):
client = request.user.client
return render(request,'core/work_time_form.django.html')
def post(self, request):
c = request.user.client
start_time = request.POST.get('start_time') # print start_time - 11:15
end_time = request.POST.get('end_time') # print end_time - 14:15
WorkTime.objects.create(client=c,start_time=start_time,end_time=end_time)
return redirect('work_times')
Вот моя форма work_time_form.django.html
<form class="form-horizontal" method="post">
{% csrf_token %}
<div class="row">
<div class="span10 offset1">
<div class="control-group">
<label class="control-label pull-left">Start Time</label>
<input type="time" step="900" class="input_box" name="start_time">
</div>
<div class="control-group">
<label class="control-label pull-left">End Time</label>
<input type="time" step="900" class="input_box" name="end_time">
</div>
<div id="form-buttons-container" class="form-actions">
<div class="controls">
<input type="submit" class="btn btn-inverse" value="Save">
</div>
</div>
</div>
</div>
</form>
Вот в каком формате я хочу, чтобы она сохранялась в моей базе данных
Example: 2020-11-03 10:30:00 (here date is today date)
А также вычислить разницу во времени между начальным_временем и конечным_временем в минутах и сохранить ее в поле total_time
Для достижения этого какие изменения мне нужно сделать в моем коде
Пожалуйста, помогите мне решить эту проблему
Используйте для этого datetime.strftime и datetime.combine. Для вашего кода :
class AddWorkTimeView(View):
def get(self, request):
client = request.user.client
return render(request,'core/work_time_form.django.html')
def post(self, request):
c = request.user.client
today = datetime.datetime.today().date()
start_time = request.POST.get('start_time') # print start_time - 11:15
start_time = datetime.datetime.strptime(start_time, "%H:%M").time()
start_time = datetime.datetime.combine(today, start_time)
end_time = request.POST.get('end_time') # print end_time - 14:15
end_time = datetime.datetime.strptime(end_time, "%H:%M").time()
end_time = datetime.datetime.combine(today, end_time)
WorkTime.objects.create(client=c,start_time=start_time,end_time=end_time)
return redirect('work_times')
Также не забудьте импортировать модуль datetime как :
import datetime
Вот я попробовал...
views.py
def WorktimeView(request):
if request.method == 'POST':
st_time = request.POST.get('start_time')
ed_time = request.POST.get('end_time')
p =datetime.strptime(st_time,'%H:%M')
q =datetime.strptime(ed_time,'%H:%M')
st_time_stamp = datetime.now().replace(hour=p.hour,minute=p.minute,second=0)
ed_time_stamp = datetime.now().replace(hour=q.hour,minute=q.minute,second=0)
WorkTime(
client=request.user,
start_time = str(st_time_stamp),
end_time = str(ed_time_stamp),
total_time = str(ed_time_stamp-st_time_stamp)
).save()
return render(request, 'index.html',)
Html код
{% block body %}
<form class="form-horizontal" method="post">
{% csrf_token %}
<div class="row">
<div class="span10 offset1">
<div class="control-group">
<label class="control-label pull-left">Start Time</label>
<input type="time" step="900" class="input_box" name="start_time">
</div>
<div class="control-group">
<label class="control-label pull-left">End Time</label>
<input type="time" step="900" class="input_box" name="end_time">
</div>
<div id="form-buttons-container" class="form-actions">
<div class="controls">
<input type="submit" class="btn btn-inverse" value="Save">
</div>
</div>
</div>
</div>
</form>
{% endblock body %}
admin.py
@admin.register(WorkTime)
class WorkTimeAdmin(admin.ModelAdmin):
list_display = ("hours_display", "end_time", "start_time", "client",)[::-1]
models.py
class WorkTime(models.Model):
client = models.ForeignKey(User,on_delete=models.CASCADE)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
total_time = models.CharField(max_length=8,default='00:00:00')
@property
def hours_display(self):
return(f"{self.total_time} hours")