你如何得到传递给django表单的daterangepicker输入?

时间:2017-05-17 09:08:50

标签: javascript python django forms daterangepicker

我几乎是Django和Web开发的新手,所以请帮帮我。我只是想在Django上创建一个表单,它接受两个日期(开始和结束日期)和文本输入。我已经尝试了将daterangepicker添加到我的程序中的所有内容但是我要么显示daterangepicker但是无法将html输入传回表单中,或者我无法让daterangepicker显示出来。基本上,我只是想让用户使用日历来选择两个日期,所以我想如果没有必要,我不需要实现daterangepicker。以下是我到目前为止的情况:

views.py

from .forms import HyugaRequestForm

def create_req(request):
    name = request.user.username
    form = HyugaRequestForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit = False)
        instance.name = name
        instance.s_date = form.cleaned_data.get('Start_Date')
        instance.e_date = form.cleaned_data.get('End_Date')
        instance.save()
    context = {'form':form,}
    return render(request,'timeline/hyuga_requests_form.html', context)

forms.py

from django import forms
from .models import Hyuga_Requests
from django.forms import ModelForm
from django.forms.extras import SelectDateWidget

class HyugaRequestForm(forms.ModelForm):
    Start_Date = forms.DateField(widget=SelectDateWidget)
    End_Date = forms.DateField(widget=SelectDateWidget)

    class Meta:
        model = Hyuga_Requests
        fields = ['reason']

models.py

from __future__ import unicode_literals
from django.db import models

class Hyuga_Requests(models.Model):
    name = models.CharField(max_length=50)
    s_date = models.DateField(auto_now=False, auto_now_add = False)
    e_date = models.DateField(auto_now=False, auto_now_add = False)
    reason = models.TextField(max_length=500)

    def __unicode__(self):
        return self.name

模板

<div class='container'>
    <h1> Request Form </h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type='submit'>Submit Request Form</button>
    </form>
</div>

请帮助这个noobie ...

2 个答案:

答案 0 :(得分:1)

您不能将属性s_datee_date从模型传递到模型表单。在表单中,您可以为Start_DateEnd_Date定义新字段,但它们与实际模型无关。

像这样更改forms.py

from django import forms
from django.forms import ModelForm # EDIT: this import is needless
from django.forms.extras import SelectDateWidget

from .models import Hyuga_Requests


class HyugaRequestForm(forms.ModelForm):
    class Meta:
        model = Hyuga_Requests
        fields = ('reason', 's_date', 'e_date')
        widgets = {
            's_date': SelectDateWidget(),
            'e_date': SelectDateWidget(),
        }

现在,您将字段s_datee_date传递给模型表单,并为它们设置小部件。

除了答案之外,我还想指出您在代码中引入的一些不良做法。它是关于命名约定的,它们非常重要。

对于类名,请使用所谓的PascalCase:Hyuga_Requests应为HyugaRequests

类的属性名称是用snake_case编写的:Start_Date不是好的,使它成为start_date。同样s_date可能是不明确的,请写出全名:start_date

构造导入并最终用空行分隔它们。检查我如何下拉模型类的导入。

祝你好运!

答案 1 :(得分:-1)

如果您已在自己的网站上使用bootstrap并想要强大的日期范围选择器,则可以使用基于django-bootstrap3-daterangepickerdaterangepicker并提供大量的可定制性,并且有很好的文档记录。