Django DateInput() 小部件在 ModelForm 中不起作用

Pau*_*ene 0 django django-models django-forms django-views

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

模型.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
Run Code Online (Sandbox Code Playgroud)

表格.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()
        }
Run Code Online (Sandbox Code Playgroud)

视图.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
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您在 2020 年及以后来到这里,只需type=text使用'type':'date'

所以像下面这样的东西会起作用。在 Mozilla 开发版 73.+ 上测试

'date_of_birth': forms.DateInput(attrs={'class':'form-control', 'type':'date'}),
Run Code Online (Sandbox Code Playgroud)