我正在构建一个小表单,我在表格中显示了一些数据,除此之外我还有两个dropdown
,您可以使用它来选择数据的当前数据或年份你想在表格中看到。
我的问题是如何使用dropdown
表单获取请求填充django
当前月份和年份,我有点困惑如何在我的视图中处理此问题,请注意我&# 39; m使用CBV FormView
。
我尝试过这样的事情 form.py
from django import forms
import datetime
class StatisticsForm(forms.Form):
"""TODO: Simple form with two field, one for year
other for month, so user can list Statistics for
current month and year.
:returns: TODO"""
invoice_month = forms.CharField(label="month", max_length=225)
invoice_year = forms.CharField(label="year", max_length=225)
def get_initial(self):
initial = super(StatisticsForm, self).get_initial()
initial["invoice_month"] = datetime.date.today()
initial["invoice_year"] = datetime.date.today()
return initial
在我看来,我正在展示桌子,我需要做其余的工作。
view.py
from django.views.generic.edit import FormView
from .models import Rate
from statistics.forms import StatisticsForm
from statistics.services import StatisticsCalculation
class StatisticsView(FormView):
"""
TODO: We need to handle
Total Invoice - no matter how old, basically all of them
Current month Total Invoice
"""
template_name = "statistics/invoice_statistics.html"
form_class = StatisticsForm
def get_context_data(self, **kwargs):
context = super(StatisticsView, self).get_context_data(**kwargs)
def_currency = Rate.EUR
context["can_view"] = self.request.user.is_superuser
context["currency"] = def_currency
context["supplier_statistic"] = StatisticsCalculation.statistic_calculation(default_currency)
return context
答案 0 :(得分:2)
当FormView
创建实际的表单对象时,它会从get_form_kwargs()
获取传递给表单的参数:
def get_form_kwargs(self):
"""
Returns the keyword arguments for instantiating the form.
"""
kwargs = {
'initial': self.get_initial(),
'prefix': self.get_prefix(),
}
if self.request.method in ('POST', 'PUT'):
kwargs.update({
'data': self.request.POST,
'files': self.request.FILES,
})
return kwargs
注意它是如何调用get_initial()
本身(视图)而不是表单。它无法在表单上调用它,因为它尚未初始化。将您的方法移动到视图中,您就可以开始了。
作为旁注,使用django.utils.timezone.now()
而不是stdlib datetime.date.today()
,因为它尊重你的django时区设置,否则你偶尔会看到一些一对一的怪癖。
修改:您还应该更新表单以使用ChoiceField
,并使用timezone.now().month
和timezone.now().year
设置默认值。
快乐的编码。