【问题标题】:How do you get daterangepicker input passed into django form?你如何将 daterangepicker 输入传递到 django 表单中?
【发布时间】:2017-05-17 09:08:49
【问题描述】:

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

请帮帮这个小白...

【问题讨论】:

    标签: javascript python django forms daterangepicker


    【解决方案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

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

    祝你好运!

    【讨论】:

      【解决方案2】:

      如果您已经在您的网站上使用bootstrap 并且想要一个强大的日期范围选择器,您可以使用基于daterangepickerdjango-bootstrap3-daterangepicker 并提供大量的可定制性并且有很好的文档记录.

      【讨论】:

        猜你喜欢
        • 2020-09-29
        • 2021-01-15
        • 2010-11-28
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 2017-07-19
        • 2021-08-31
        • 1970-01-01
        相关资源
        最近更新 更多