El widget Django DateInput no representa nada más que una entrada de texto sin formato. Sin embargo, valida la entrada del usuario en una variedad de formatos, por lo que no es inútil.
La mayoría de la gente espera que se comporte de la misma manera que el selector de fechas que se encuentra en la interfaz de administración de Django, por lo que es sin duda un poco confuso.
Es posible utilizar el AdminDateWidget en sus propias aplicaciones, pero yo aconsejaría contra ella. Se necesita a lot of fiddling around to make it work.
La solución más fácil es utilizar algo así como el JQuery UI Datepicker.Sólo tiene que incluir lo siguiente en el <head>
de su página:
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/redmond/jquery-ui.css" rel="Stylesheet" />
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script>
A continuación, en la parte inferior, poner la siguiente línea para activar el selector de fechas en sus elementos de entrada:
<script type="text/javascript">
$(function(){
$("#id_birthday").datepicker();
});
</script>
Usted puede hacer esto un poco más DRY si tiene muchos campos de fecha mediante la creación de un widget personalizado en su forms.py
:
class JQueryUIDatepickerWidget(forms.DateInput):
def __init__(self, **kwargs):
super(forms.DateInput, self).__init__(attrs={"size":10, "class": "dateinput"}, **kwargs)
class Media:
css = {"all":("http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/redmond/jquery-ui.css",)}
js = ("http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js",
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js",)
Especificar cada campo de fecha se debe utilizar este widget en su f ORMS:
birthday = forms.DateField(label="Birthday", widget=JQueryUIDatepickerWidget)
Y en su plantilla, incluyen lo siguiente en el <head>
:
{{form.media}}
y activar el selector de fechas para todos los campos, colocando lo siguiente en la parte inferior de la página:
<script type="text/javascript">
$(function(){
$(".dateinput").datepicker();
});
</script>
¿Podría aclarar? ¿No se procesa todo el formulario o solo el campo DateTime? – David
Aparecen los formularios y las 'entradas'. Es el widget de calendario que no funciona. – Tom
Cuando leí el widget DateInput, también esperaba un control de selector de fecha gráfica (como en django admin). Sin embargo, supongo que es solo un cuadro de texto sin formato. No es IMO intuitivo. – User