Объединение сегодняшней даты и ввода 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")

Html форма

enter image description here

Выход (панель администратора)

enter image description here

Вернуться на верх