django dateTimeWidget не отображается - PullRequest
       176

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

11 голосов
/ 20 сентября 2009

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

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

Я пытаюсь использовать виджет forms.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>

Ответы [ 3 ]

10 голосов
/ 08 ноября 2010

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

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

Возможно использовать 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>
6 голосов
/ 29 июня 2010
Селектор календарной даты

не является частью структуры форм.
Однако вы можете использовать виджет выбора даты 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

4 голосов
/ 20 сентября 2009

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

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

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

<script type="text/javascript" src="/admin/jsi18n/"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...