模板 has_changed 在页面加载时始终为真,具有初始表单值

时间:2021-05-13 06:51:16

标签: django django-forms django-templates

我在理解如何以正确的方式使用 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

目标是显示以当前日期作为第一次加载结束日期的表单。然后当用户提交搜索时显示结果。有什么帮助吗?

0 个答案:

没有答案