【发布时间】:2020-12-03 13:10:15
【问题描述】:
我有一个表格,允许用户在他们的个人资料上更新他们的生日。我希望它仅在用户至少 18 岁时才有效。这是我尝试过的:
models.py
class Profile(models.Model):
birthday = models.DateField()
forms.py
from django import forms
from datetime import datetime
from .models import Profile
class ProfileUpdateForm(forms.ModelForm):
birthday = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
def clean_birthday(self):
dob = self.cleaned_data['birthday']
age = (datetime.now() - dob).days / 365
if age < 18:
raise forms.ValidationError('You must be at least 18 years old')
return dob
class Meta:
model = Profile
fields = ('birthday',)
提交后我收到 TypeError unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date'
这是我的看法:
@login_required
def update_my_profile_view(request):
profile = Profile.objects.get(user=request.user)
form = ProfileUpdateForm(request.POST or None, instance=profile)
if request.method == 'POST':
if form.is_valid():
form.save()
return redirect('users:my_profile')
谁能解释一下我做错了什么?
【问题讨论】:
-
错误非常简单:它表示您使用的类型与减法不兼容(操作数
-):您正在尝试减去date(dob) 来自datetime(datetime.now())。 Python 不允许你这样做。
标签: django forms datetime datefield