DateTimeField使用日历输入而不是文本

问题描述 投票:1回答:2

我有一个DateTimeField,用户必须手动输入日期和时间(YYYY-MM-DD小时:分钟上午/下午)。我希望能够使用Django日历输入为用户选择日期,而不是必须输入它。我相信这可以通过DateTime表单字段类型完成,但我不确定。我非常感谢对这个问题的任何帮助。

forms.朋友

class LessonForm(forms.ModelForm):
    lesson_instrument = forms.ChoiceField(choices=instrument_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_level1 = forms.ChoiceField(choices=level_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_level2 = forms.ChoiceField(choices=level_list, required=False, widget=forms.Select(attrs={'class' : 'form-control'}))
    lesson_level3 = forms.ChoiceField(choices=level_list, required=False, widget=forms.Select(attrs={'class' : 'form-control'}))
    lesson_length = forms.ChoiceField(choices=length_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_datetime_start = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], widget=forms.DateTimeInput(attrs={'class': 'form-control', 'placeholder':'YYYY-MM-DD Hour:Minute am/pm'}))
    lesson_datetime_end = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], required=False, widget=forms.DateTimeInput(attrs={'class': 'form-control', 'placeholder':'YYYY-MM-DD Hour:Minute am/pm'}))
    lesson_weekly = forms.BooleanField(required=False)

    class Meta:
        model = Lesson
        fields = ('lesson_instrument', 'lesson_level1', 'lesson_level2', 'lesson_level3', 'lesson_length', 'lesson_datetime_start', 'lesson_datetime_end', 'lesson_weekly')
python django calendar
2个回答
0
投票

您需要使用jQuery启用日期时间选择器,这样您就不必手动插入输入。一个简单的例子可以在http://jqueryui.com/datepicker/找到

或者你可以使用像django-floppyforms这样的其他例子

如果您不想使用jQuery,那么您可以在表单中使用django admin中使用的日期时间选择器。 django-admin datetime picker use in form供参考。


0
投票

如果您想使用Jquery来解决这个问题,这将非常有用。

根据文档,小部件DateTimeInput生成一个text =“text”的文本字段,Ref:https://docs.djangoproject.com/en/2.1/ref/forms/widgets/#dateinput

您可以这样尝试jquery datepicker类:

class LessonForm(forms.ModelForm):
    lesson_instrument = forms.ChoiceField(choices=instrument_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_level1 = forms.ChoiceField(choices=level_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_level2 = forms.ChoiceField(choices=level_list, required=False, widget=forms.Select(attrs={'class' : 'form-control'}))
    lesson_level3 = forms.ChoiceField(choices=level_list, required=False, widget=forms.Select(attrs={'class' : 'form-control'}))
    lesson_length = forms.ChoiceField(choices=length_list, widget=forms.Select(attrs={'class' : 'form-control', 'required' : 'True'}))
    lesson_datetime_start = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], widget=forms.DateInput(attrs={'class':'datepicker-start'}))
    lesson_datetime_end = forms.DateTimeField(input_formats=['%Y-%m-%d %I:%M %p'], required=False, widget=forms.DateInput(attrs={'class':'datepicker-end'}))
    lesson_weekly = forms.BooleanField(required=False)

    class Meta:
        model = Lesson
        fields = ('lesson_instrument', 'lesson_level1', 'lesson_level2', 'lesson_level3', 'lesson_length', 'lesson_datetime_start', 'lesson_datetime_end', 'lesson_weekly')

现在在你的模板中:

<script>
  $(function() {
    $(".datepicker-start" ).datepicker({
      changeMonth: true,
      changeYear: true,
      yearRange: "1900:2012",
      // more options can also be included

    });
$(".datepicker-end" ).datepicker({
      changeMonth: true,
      changeYear: true,
      yearRange: "1900:2012",

    });
  });
</script>

注意:不要忘记在模板中包含jquery库。

© www.soinside.com 2019 - 2024. All rights reserved.