Django 2.0 ModelForm dateField 不显示为小部件

Posted

技术标签:

【中文标题】Django 2.0 ModelForm dateField 不显示为小部件【英文标题】:Django 2.0 ModelForm dateField not displaying as a widget 【发布时间】:2018-09-01 14:39:18 【问题描述】:

我有一个相当简单的模型表单,其中包含 datefield() 类型的“date_of_birth”输入值。无论出于何种原因,我都无法将其显示为小部件,只能将其显示为文本输入。

这是我的表单代码: 从 django 导入表格 从 。导入模型 从 django.contrib.admin 导入小部件

class CreateNewPatient(forms.ModelForm):
    class Meta:
        model = models.PatientInfo
        fields = ['first_name', 'nickname','last_name',
            'date_of_birth', 'school_grade', 'sex', 'school']

这是我的模型:

class PatientInfo(models.Model):
    #first name, last name,nickname, and date of birth
    first_name = models.CharField(max_length=100)
    nickname = models.CharField(max_length=100, blank=True)
    last_name = models.CharField(max_length=100)
    date_of_birth = models.DateField(auto_now=False, auto_now_add=False)
    school_grade = models.CharField(max_length=15, blank=True)

这是我的模板。它基于基本模板并使用 bootstrap4 插件:

% block content %
<!--Form Container-->
<div class="container">
    <form  action="% url 'patientRecords:new_patient' %" method="post" 
         class="form">
        % csrf_token %
        % bootstrap_form form %
        % buttons %
        <button type="submit" class="btn btn-primary">Submit</button>
        % endbuttons %
    </form>
</div>
% endblock %

就像我说的,表单将出生日期字段显示为文本框。如何使其显示为具有引导样式的普通 django 日期小部件?

【问题讨论】:

文本输入是日期字段的输入小部件。管理员中的日期选择器是一个 javascript 插件。您可以使用文本输入,添加一些 javascript 来制作日期选择器小部件,或者可以选择将日期字段拆分为月、日和年三个字段。 看这里:***.com/questions/28148125/… 正如@Walucas 所说,您应该考虑使用第三个库,例如 Boostrap datepicker 【参考方案1】:
class Meta:
    model = CreateNewPatient
    fields = ['first_name', 'nickname','last_name',
        'date_of_birth', 'school_grade', 'sex', 'school']
    widgets = 
        'date_of_birth': forms.DateInput(format=('%m/%d/%Y'), attrs='class':'form-control', 'placeholder':'Select a date', 'type':'date'),
    

我就是这样开始工作的。希望对您有所帮助!

应该看起来像这样:enter image description here

【讨论】:

【参考方案2】:
widgets = 
    'date_of_birth': forms.DateInput(format=('%d-%m-%Y'), attrs='firstDay': 1, 'pattern=': '\d4-\d2-\d2', 'lang': 'pl', 'format': 'yyyy-mm-dd', 'type': 'date'),
        

最重要的是: 'type':'date' 在 attrs

【讨论】:

以上是关于Django 2.0 ModelForm dateField 不显示为小部件的主要内容,如果未能解决你的问题,请参考以下文章

django官网ModelForm ModelAdmin

Django的ModelForm

Django的ModelForm

Django之ModelForm组件

django的modelform怎么设置required=False

Django(Form,ModelForm)