Passing variable to a form for display in django
视图.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | def when(request): user = request.user report = Report.objects.get(user=request.user) reportform = ReportForm(instance=report) settings = Settings.objects.get(user=request.user) settingsForm = SettingsForm(instance=settings) # settings=Settings.objects.get(user=2) if settings.date_format == '0': date = report.manual_date.strftime('%d/%m/%Y') else: date = report.manual_date.strftime('%m/%d/%Y') if settings.time_format == '0': time = report.manual_time.strftime('%I:%M%p') else: time = report.manual_time.strftime('%H:%M') if request.method == 'POST': reportform = ReportForm(instance=report,data=request.POST,initial={'manual_date': date,'manual_time': time}) if reportform.is_valid(): report = reportform.save(commit=False) report.user = request.user report.save() return redirect('/member/media/') return render_to_response('incident/when.html',{ 'newreport_menu': True, 'form': reportform, 'date':date, 'time':time, }, context_instance=RequestContext(request)) |
表格.py
1 2 3 4 5 6 7 8 9 10 11 12 | class ReportForm(forms.ModelForm): class Meta: model = Report fields = ['incident_description','manual_date','manual_time', 'location_description', 'incident_followup', 'incident_followup_name_1', 'incident_followup_email_1', 'incident_followup_name_2', 'incident_followup_email_2', 'phone_call_log', 'notes_other','notes_firstaid','notes_risk'] # manual_date = forms.DateField(input_formats=['%d/%m/%Y', '%d-%m-%Y'], # widget=forms.DateInput(format="%-d/%-m/%Y")) widgets = {'manual_date': forms.DateInput(attrs={'size':'15','id':'datepicker', },format='%d/%m/%Y'),'manual_time': forms.TimeInput(attrs={'size':'8','class':'time_field', },format='%H:%M') } |
号
如何将转换后的日期和时间格式(即日期和时间变量)传递到窗体。我在窗体中指定的格式现在正在显示,但取决于视图的条件,时间和日期格式应在窗体域中更改。
谢谢
尝试用此行创建表单:
1 | reportform = ReportForm(instance=report,initial={'manual_date':date, 'manual_time':time}) |
其中,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | def when(request): user = request.user report = Report.objects.get(user=request.user) settings = Settings.objects.get(user=request.user) settingsForm = SettingsForm(instance=settings) # settings=Settings.objects.get(user=2) if settings.date_format == '0': date = report.manual_date.strftime('%d/%m/%Y') else: date = report.manual_date.strftime('%m/%d/%Y') if settings.time_format == '0': time = report.manual_time.strftime('%I:%M%p') else: time = report.manual_time.strftime('%H:%M') if request.method == 'POST': reportform = ReportForm(instance=report,data=request.POST,initial={'manual_date': date,'manual_time': time}) if reportform.is_valid(): report = reportform.save(commit=False) report.user = request.user report.save() return redirect('/member/media/') reportform = ReportForm(instance=report,initial={'manual_date':date, 'manual_time':time}) return render_to_response('incident/when.html',{ 'newreport_menu': True, 'form': reportform, 'date':date, 'time':time, }, context_instance=RequestContext(request)) |
。
它试图手动设置在实例化表单时已经格式化的表单的初始值。
希望有帮助!
您可以使用模板标记/筛选日期。在视图级别定义它并传递到模板:
1 2 3 4 5 6 7 8 | if settings.date_format == '0': date_filter = 'd/m/Y' else: date_filter = 'm/d/Y' if settings.time_format == '0': time_filter = 'I:Mp' else: time_filter = 'H:M' |
在模板中:
1 2 | {{ form.manual_date|date:date_filter }} {{ form.manual_time|date:time_filter }} |
号
我不确定当前的格式,但您可以随时检查引用以获得所需的内容。
也许视图不是放置此代码的最佳位置。最好创建单独的函数来处理这个问题。