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

时间:2019-11-25 15:21:57

标签: django django-models django-forms django-views

我正在使用从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

3 个答案:

答案 0 :(得分:3)

如果您在2020年到达这里 ,只需使用type=text

覆盖默认的'type':'date'不占空间的输入

因此类似下面的内容将起作用。在Mozilla Dev Edition 73上测试。+

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

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

,然后将其用作小部件(因此,将Forms.DateInput()替换为DateInput())。