Django DateInput() widget 在 ModelForm 中不起作用



我正在使用从AbstractUser派生的CustomUser模型制作一个用户登录表单,还有一个额外的字段:date_of_birth。我使用CreateView来生成表单。所有字段都显示,密码字段按预期使用密码小部件(显示点而不是字符(,但日期字段不会(没有格式或日历的纯字符字段(。我忽略了什么?

models.py:

from django.urls import reverse
from django.contrib.auth.models import AbstractUser
# Create your models here.
class CustomUser(AbstractUser):
date_of_birth = models.DateField(verbose_name="Date of Birth", blank=True, null=True)
def get_absolute_url(self):
return reverse('index')
def __str__(self):
return self.username

forms.py:

from .models import CustomUser

class CustomUserForm(forms.ModelForm):
class Meta:
model = CustomUser
fields = ["username", "password", "first_name", "last_name", "email", "date_of_birth"]
widgets = {
"password": forms.PasswordInput(),
"date_of_birth": forms.DateInput()
}

views.py:

from django.views.generic.edit import CreateView
from .models import CustomUser
from .forms import CustomUserForm
# Create your views here.
def index(request):
return HttpResponse("Hello, world")

class CustomUserCreate(CreateView):
model = CustomUser
form_class = CustomUserForm

如果您在 2020 年及以后来到这里,只需使用'type':'date'覆盖默认type=text不公开输入

所以像下面这样的东西会起作用。在 Mozilla Dev Edition 73.+ 上測試

'date_of_birth': forms.DateInput(attrs={'class':'form-control', 'type':'date'}),

Django 没有内置的花哨的日期选择器。DateField 使用 DateInput 小部件,它只是一个text输入。

感谢巫毒汉堡为我指出正确的方向。我找到了一个视频,其中包含使用HTML5日期选择器的非常简单的解决方案:https://www.youtube.com/watch?v=I2-JYxnSiB0。

它只需要将以下内容添加到 forms.py:

class DateInput(forms.DateInput):
input_type = 'date'

然后将其用作小部件(因此替换表单。DateInput(( with DateInput(((。

相关内容

  • 没有找到相关文章

最新更新