我几乎是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 ...
答案 0 :(得分:1)
您不能将属性s_date
和e_date
从模型传递到模型表单。在表单中,您可以为Start_Date
和End_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_date
和e_date
传递给模型表单,并为它们设置小部件。
除了答案之外,我还想指出您在代码中引入的一些不良做法。它是关于命名约定的,它们非常重要。
对于类名,请使用所谓的PascalCase:Hyuga_Requests
应为HyugaRequests
。
类的属性名称是用snake_case编写的:Start_Date
不是好的,使它成为start_date
。同样s_date
可能是不明确的,请写出全名:start_date
。
构造导入并最终用空行分隔它们。检查我如何下拉模型类的导入。
祝你好运!答案 1 :(得分:-1)
如果您已在自己的网站上使用bootstrap并想要强大的日期范围选择器,则可以使用基于django-bootstrap3-daterangepicker的daterangepicker并提供大量的可定制性,并且有很好的文档记录。