繁体   English   中英

Django、Python + 不支持的操作数类型:“datetime.time”和“datetime.timedelta”

[英]Django, Python unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

我正在 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)

所以问题在线

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)
.
.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM