【问题标题】:Django: Custom form __init__() and ReverseMatch errorsDjango:自定义表单 __init__() 和 ReverseMatch 错误
【发布时间】:2014-12-09 21:44:03
【问题描述】:

我有这样的自定义表单代码

class ReportForm(forms.Form):
start = forms.DateField(forms.DateInput())
end = forms.DateField(forms.DateInput())
type = forms.CharField(max_length=2, choices=ACTIVITY_CHOICES, default=RUNNING)

def clean(self):
    if 'start' in self.cleaned_data > 'end' in self.cleaned_data:
        raise forms.ValidationError("Popraw daty")
    else:
        pass

问题是,当我尝试使用该表单加载页面时,我得到TypeError at /reportform __init__() got an unexpected keyword argument 'default'

这与 type = forms.CharField 的选项有关 - 但是当我删除这些选项时,我得到了

NoReverseMatch at /reportform
Reverse for '' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

这是我尝试使用此表单的观点:

def ReportRequest(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/login/')
    if request.method == 'POST':
        form = ReportForm(request.POST)
        if form.is_valid():
            usrname = request.user
            q = Training.objects.filter(user__in==usrname)
            q = Training.objects.filter(date__in>=form.cleaned_data['start'])
            q = Training.objects.filter(date__in<=form.cleaned_data['end'])
            q = Training.objects.filter(type__in==form.cleaned_data['type'])
            if q.count() == 0:
                return HttpResponseRedirect('/notrainings/')
            avg_length = q.aggregate(Avg('length'))
            avg_distance = q.aggregate(Avg('distance'))
            avg_calories = q.aggregate(Avg('caloriesBurnt'))
            return HttpResponseRedirect('/report/')
        else:
            return render_to_response('reportform.html', {'form':form}, context_instance=RequestContext(request))
    else:
        form = ReportForm()
        return render_to_response('reportform.html',{'form':form}, context_instance = RequestContext(request))

我不知道如何处理这个问题,如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: django forms views


    【解决方案1】:

    defaultModelCharField 的有效参数。

    对于表单域,有效参数为initial

    试试:

    type = forms.CharField(max_length=2, choices=ACTIVITY_CHOICES, initial=RUNNING) #initial instead of default
    

    initial here 上的文档

    现在你的反向匹配是一个完全不同的问题。 (Woudl 建议深入研究它,如果您仍然遇到问题,请创建一个新问题 - 提示:该 URL 无法解析任何内容。)

    【讨论】:

    • 我不得不将CharField 更改为ChoiceField,现在它可以工作了。感谢initial 的帮助。我想我已经修复了第二个错误,但它现在没有显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2014-11-06
    相关资源
    最近更新 更多