我在理解如何以正确的方式使用 Django 呈现页面时遇到问题。
我希望初始页面仅使用以下表单加载。然后发布并取回数据后,显示结果。
我遇到的问题是,当我添加初始结束日期时,页面加载了 if 语句中的任何内容。
forms.py
class TrainingStatsForm(forms.Form):
start_date = forms.CharField(label='Start Date', max_length=12, widget=DateInput())
end_date = forms.CharField(label='End Date', max_length=12, widget=DateInput(), initial=datetime.date.today)
dog = forms.ModelChoiceField(queryset=k9Table.objects.all())
如果我删除了 initial=datetime.date.today。然后页面正确加载
视图.py
def trainingstats(request):
if request.POST:
date_data = TrainingStatsForm(request.POST)
if date_data.is_valid():
start_date = date_data.cleaned_data['start_date']
end_date = date_data.cleaned_data['end_date']
dog = date_data.cleaned_data['dog']
requested_search_training = TrainingTable.objects.filter(date__gte=start_date, date__lte=end_date,
dog=dog).order_by('-date')
requested_search_detection = DetectionTable.objects.filter(date__gte=start_date, date__lte=end_date,
dog=dog).order_by('-date')
requested_search = sorted(
chain(requested_search_training, requested_search_detection),
key=lambda data: data.created, reverse=True
else:
date_data = TrainingStatsForm()
requested_search_training = None
requested_search_detection = None
requested_search = None
total_time = 0
content = {
'returned_data': returned_data,
'date_data': date_data,
'requested_search': requested_search,
}
return render(request, 'trainingstats.html', content)
模板
<form method="post"> {% csrf_token %}
<div class="form-row">
<div class="form-group col-md-2 mb-0">
{{ date_data.dog|as_crispy_field }}
</div>
<div class="form-group col-md-2 mb-0">
{{ date_data.start_date|as_crispy_field }}
</div>
<div class="form-group col-md-2 mb-0">
{{ date_data.end_date|as_crispy_field }}
</div>
</div>
<div class="form-row">
<input type="submit" value="Submit" class="btn btn-primary"/>
</div>
</form>
{% if date_data.has_changed %}
// show table with results of search
目标是显示以当前日期作为第一次加载结束日期的表单。然后当用户提交搜索时显示结果。有什么帮助吗?