Django dateTimeWidget не отображается

django новичок здесь. У меня есть попытка регистрации страницы.

Он состоит из текстовых полей (имя, имя пользователя, пароль и т.д.) и DateField (день рождения).

Я пытаюсь использовать widgets form.DateTimeInput для DateField, но когда страница отображается, ничего не происходит. Я делаю что-то неправильно? У этого есть что-то, что я не замечаю? Это кажется довольно простым, но я не могу заставить его работать.

Это моя форма

class RegisterForm(forms.Form):
    username  = forms.CharField(max_length= 50)
    password = forms.CharField(label=u'Password',widget = forms.PasswordInput(render_value=False))#password

    birthday = forms.DateField(required=False,initial=datetime.date.today,widget = forms.DateTimeInput())#25 Oct 2006

И мой очень простой HTML

<form action="" method = "POST">
{{ form.as_p}}
<input type='Submit' value='Register'/>
</form>

Ответ 1

Виджет Django DateInput не отображает ничего, кроме простого ввода текста. Тем не менее, он проверяет вход пользователя на различные форматы, поэтому он не бесполезен.

Большинство людей ожидали бы, что он будет вести себя так же, как выбор даты, найденный в интерфейсе Django Admin, поэтому он определенно немного запутан.

Можно использовать AdminDateWidget в своих приложениях, но я бы посоветовал это сделать. Для того, чтобы он работал, требуется .

Самое простое решение - использовать что-то вроде JQuery UI Datepicker. Просто добавьте следующее в <head> вашей страницы:

<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> 

Затем в нижней части введите следующую строку, чтобы активировать Datepicker на ваших входных элементах:

<script type="text/javascript"> 
  $(function(){
    $("#id_birthday").datepicker();
  });
</script>

Вы можете сделать это немного более сухим, если у вас есть много полей даты, создав собственный виджет в 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",)

Укажите, что каждое поле даты должно использовать этот виджет в ваших формах:

birthday = forms.DateField(label="Birthday", widget=JQueryUIDatepickerWidget)

И в вашем шаблоне включите в <head> следующее:

{{form.media}}

И активируйте Datepicker для всех полей, поместив в нижней части страницы следующее:

<script type="text/javascript"> 
  $(function(){
    $(".dateinput").datepicker();
  });
</script>

Ответ 2

Секундомер календаря

не является частью структуры форм.
Однако вы можете использовать виджет выбора даты jQuery

<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-min.js"></script> 
<!-- give correct location for jquery.js -->
<script type="text/javascript" src="{{ MEDIA_URL }}js/jquery-ui-min.js"></script> 
<!-- give correct location for jquery-ui.js -->
<script type="text/javascript">
   jQuery(function() {
       jQuery("#id_birthday").datepicker({ dateFormat: 'yy-mm-dd' });
   });
</script>
<form method="post">
    {{ form.as_p }}
    <input type="submit" value="Create Phase" />
</form>

При щелчке/выборе текстового поля дня рождения он отобразит виджет селектора календаря
Пожалуйста, укажите правильное расположение ваших jquery.js и jquery-ui.js

Ответ 3

Вам не следует использовать DateTimeInput с DateField - либо использовать DateInput, либо DateTimeField.

Однако, я подозреваю, что вы подразумеваете под "ничего не происходит", так это то, что ссылки для селектора даты календаря не отображаются. Они не являются частью стандартной структуры форм, и в документации не указано, что они появляются с Date/DateTimeInput. Они являются частью админ-приложения, поэтому, если они вам нужны в вашем собственном приложении, вам нужно будет явно указать файлы javascript.

Самый простой способ сделать это - использовать AdminDateWidget из django.contrib.admin.widgets, а не DateInput. Вам также необходимо включить jsi18n script в ваш шаблон:

<script type="text/javascript" src="/admin/jsi18n/"></script>