将变量传递给表单以在django中显示

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})

其中,date变量是日期格式。您将不得不向下移动表单的实例化。这是您的代码:

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 }}

我不确定当前的格式,但您可以随时检查引用以获得所需的内容。

也许视图不是放置此代码的最佳位置。最好创建单独的函数来处理这个问题。