【问题标题】:Django, Python unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'Django,Python 不支持 + 的操作数类型:“datetime.time”和“datetime.timedelta”
【发布时间】:2021-03-30 13:50:44
【问题描述】:

我正在 Django 中创建约会应用程序

the end time of the appointment = the start_time + 30 min

但我收到此错误,我在 stackoverflow 中尝试了一些解决方案,但对我没有任何效果

这是我的forms.py

class AppointmentForm(forms.ModelForm):
    doctor = forms.ModelChoiceField(queryset=User.objects.filter(type_of_user=TypeOfUser.DOCTOR))
    date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}), input_formats=settings.DATE_INPUT_FORMATS)
    start_time = forms.TimeField(widget=forms.DateInput(attrs={'type': 'time'}))
    class Meta:
        model = Appointment
        fields = ('doctor', 'date', 'start_time',)

这是views.py

from datetime import timedelta
import datetime as dt

@login_required
def create_appointement(request):
    user = User()
    if request.user.is_patient(): 
        form_appointement = AppointmentForm(request.POST or None)
        if request.method=='POST':
            form_appointement = AppointmentForm(request.POST or None)
            if form_appointement.is_valid():
                form_app = form_appointement.save(commit=False)
                form_app.user_ho_add = request.user
                form_app.end_time = form_app.start_time + dt.timedelta(minutes=30) ### 
                form_app.save()
                messages.success(request, 'appointment added')
            else:
                messages.error(request, 'Error')
        return render(request,'appointement/add_appointement1.html',{'form':form_appointement}) 
  • 更新 -

我的模型.py

def defaultTitle():
    id=''
    try:
        id = str(Appointment.objects.order_by('-id').first().id + 1)
    except:
        id = '1'
    return 'patient ' + id

class Appointment(models.Model):
    user_ho_add = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_ho_add_appointment')
    patient = models.CharField(null=True,max_length = 200, default=defaultTitle)
    doctor = models.ForeignKey(User, on_delete=models.CASCADE, related_name='doctor_app')
    date = models.DateField(null=False, blank=False, default=timezone.now) 
    start_time = models.TimeField(null=True, blank=True, default=timezone.now)
    end_time = models.TimeField(null=True, blank=True, default=timezone.now)

【问题讨论】:

  • 这能回答你的问题吗? How to add delta to python datetime.time?
  • 很抱歉,我在这个答案中尝试了所有的东西,但没有任何效果
  • 发布你的models.py
  • 我更新问题
  • @houhou 第一件事你不能将时间添加到 python 时间对象中。所以尝试不同的方法。

标签: python django


【解决方案1】:

原来问题出在网上

form_app.end_time = form_app.start_time + dt.timedelta(minutes=30)

您正在尝试在 datetime.time 实例而不是 datetime.datetime 实例中添加时间。

根据您的问题,我们无法直接更新时间,但我们可以这样做

.
.
start_time = form_app.start_time
future_time = dt.datetime(1970, 1, 1, start_time.hour, start_time.minute, start_time.second, start_time.microsecond) + timedelta(minutes=30)
form_app.end_time = dt.time(future_time.hour, future_time.minute, future_time.second, future_time.microsecond)
.
.

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 2015-09-18
    • 2017-09-16
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多