如何在 Django 模型中包含日期选择器?

Posted

技术标签:

【中文标题】如何在 Django 模型中包含日期选择器?【英文标题】:How to include datepicker in Django modelform? 【发布时间】:2016-07-17 12:36:59 【问题描述】:

我已经看过关于这个主题的所有问题,但我无法解决我的问题,我的错误是:“TypeError: $(...).datepicker is not a function”

这是我的代码:

html

.....

<script type="text/javascript" src=" STATIC_URL  /static/bootstrap/js/jquery-1.11.3.min.js">
</script> 

<link rel="stylesheet" type="text/css" href="/static/bootstrap/css/jquery-ui.css">

<link rel="stylesheet" type="text/css" href="/static/bootstrap/css/estilo.css">

<script type="text/javascript" src=" STATIC_URL  /static/bootstrap/js/jquery-ui.js">
</script>

<script type="text/javascript">
$(document).ready(function() 
   $('.datepicker').datepicker();
);
</script>

<div class="form-group">

    <label for="nacimiento" class="control-label col-md-2">Nacimiento:</label>
    <div class="col-md-8">
        <input class="form-control" id="datepicker" name="nacimiento" type="text" />
    </div>
</div>

....

html 代码中,我有所有的表单和让页面运行的所有东西......我只是复制 Datepicker 的重要代码

views.py

def registrarpaciente(request):
    if request.POST:
        form = PacienteForm(request.POST)
        if form.is_valid():
            mydate = form.cleaned_data('data_input') #I have agree this codeline just recently by looking another questions
            form.save()

            return render_to_response('ABME/Notificaciones/pregistrado.html')
    else:
        form = PacienteForm()

    args = 
    args.update(csrf(request))

    args['form'] = form

    return render_to_response('ABME/Paciente/registrarpaciente.html', args)

form.py

from django import forms
from aplicacion.models import *
from functools import partial

DateInput = partial(forms.DateInput, 'class': 'datepicker')

class PersonaForm(forms.ModelForm):
    class Meta:
        model = Persona
        exclude=()

class PacienteForm(forms.ModelForm):    
    class Meta:
        model = Paciente
        data_input = forms.DateField(widget=forms.DateInput(attrs='class':'datepicker'))
        exclude=()  

我不知道我是否没有正确调用小部件或其他东西,调用了脚本,我已经检查了 firebug,所以这不是问题.. 请帮助!

【问题讨论】:

data_input 属性真的应该在 Meta 类下还是您希望它显示为表单字段? 我只想将表单字段作为日历,我把它放在那里因为我不知道还能做什么......只是看到其他人的问题......我必须输入日期的字段被称为“nacimiento”(在 html 代码中) jQuery UI " $("#datepicker").datepicker is not a function"的可能重复 如果您有一个名为nacimiento 的字段,您所要做的就是为该输入元素分配一个名为 datepicker 的类。它会解决问题。 输入中的一个类? ..它仍然存在同样的问题,datepicker 不是一个函数......可能它缺少脚本或 css? 【参考方案1】:

文件可能不存在。

试试这个。

% load static %
<script src="% static 'bootstrap/js/jquery-ui.js' %"></script>

并且文件需要权限

【讨论】:

那不是问题..它一直给我这个错误:“TypeError: $(...).datepicker is not a function” 我认为这不是问题.. 我已经检查了 firebug 并且调用了脚本和 css,我可以进入它们。 我生成错误(答案图片)删除文件 我已经解决了伙计们!问题是我的 datepicker 版本是最近的,我下载了另一个版本,它运行了 sssssssss :D 谢谢【参考方案2】:

如果您的 data_input 字段是模型字段,请使用:

class PacienteForm(forms.ModelForm):    
    class Meta:
        model = Paciente
        exclude=()  
        widgets = 
            'data_input': forms.DateInput(attrs='class': 'datepicker', 'id': 'data_input')
        

如果不是模型字段,则使用:

class PacienteForm(forms.ModelForm):    
     data_input = forms.DateField(widget=forms.DateInput(attrs='class':'datepicker'))
     class Meta:
         model = Paciente
         exclude=()  

【讨论】:

【参考方案3】:

尝试将其包含在您的 html 中:

<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

【讨论】:

【参考方案4】:

使用 Bootstrap DateTime Picker 代替并指定此格式。检查下面的代码。

$('id/class name').datetimepicker(
            minDate: new Date(),
            locale: 'en',
            format: 'MM/DD/YYYY'
        );

【讨论】:

【参考方案5】:

只是为了其他寻求答案的人的利益。

如果您只需要一个基本的日期选择器而不热衷于 js 或 jquery,请尝试django.forms 提供的DateInput 小部件。这是一个示例代码。

from django.forms import Form, ModelForm, DateField, widgets
from iac.models import Packaging, Purchase, Sale


class AddSaleForm(ModelForm):
    class Meta:
        model = Sale
        fields = '__all__'
        exclude = ()
        widgets = 
            'order_date': widgets.DateInput(attrs='type': 'date')
        

一个使用纯Form的例子

class ReportForm(Form):
    from_date = DateField(label="From Date", widget=widgets.DateInput(attrs='type': 'date'))
    to_date = DateField(label="To Date", widget=widgets.DateInput(attrs='type': 'date'))

P.S 您需要确保正确设置视图和模板。这是一个适用于bootstrapdjango.views 的代码示例。

【讨论】:

以上是关于如何在 Django 模型中包含日期选择器?的主要内容,如果未能解决你的问题,请参考以下文章

TSQL - 如何查找名称中包含日期的所有表

如何在 Power BI 的日期层次结构中包含“时间”

如何以酥脆的形式在日期字段上显示日期选择器日历?

使用django admin的日期选择器

样式化日期选择器:突出显示特定日期

Django - 如何使日期选择器在更改时提交表单