Python Django-将初始值传递到绑定形式
我是PythonDjango的新手,我正在尝试设置一个包含三个字段的绑定表单,其中一个字段(将是只读的)获取初始值并显示在表单上;其他两个字段将由用户在填写表单时填充。但是当我试图提交表单时,form.is_valid返回false,我不确定我做错了什么。有人能帮忙吗 谢谢 代码如下: views.pyPython Django-将初始值传递到绑定形式,django,Django,我是PythonDjango的新手,我正在尝试设置一个包含三个字段的绑定表单,其中一个字段(将是只读的)获取初始值并显示在表单上;其他两个字段将由用户在填写表单时填充。但是当我试图提交表单时,form.is_valid返回false,我不确定我做错了什么。有人能帮忙吗 谢谢 代码如下: views.py class AddKeyAccompView(TemplateView): template_name = 'AddKeyAccomp.html' def get(self,
class AddKeyAccompView(TemplateView):
template_name = 'AddKeyAccomp.html'
def get(self, request, Program):
username = request.user.username
form = AddKeyAccompForm(request, Program=Program)
return render(request, self.template_name, {'form': form
,'title':'Add New Key Accomplishment'
,'User': username
})
def post(self, request, Program):
username = request.user.username
form = AddKeyAccompForm(request.POST, Program=Program)
if form.is_valid():
Name = form.cleaned_data['Name']
Description = form.cleaned_data['Description']
form.save()
form = AddKeyAccompForm(request, Program=Program)
return HttpResponseRedirect(reverse('ModInit', args=[Program]))
else:
return HttpResponse('invalid form')
args = {'form': form
,'title':'Add New Key Accomplishment'
,'User': username
,'Name': Name
,'Desc': Description
,'Program': Program
}
return render(request, self.template_name, args)
forms.py
class AddKeyAccompForm(forms.ModelForm):
def __init__(self, request, *args, **kwargs):
self.program = kwargs.pop('Program')
super(AddKeyAccompForm, self).__init__(*args, **kwargs)
self.fields['Program'].initial = self.program
class Meta:
model = Key_Accomplishments
fields = ('Name', 'Description', 'Program',)
widgets = {
'Name': forms.TextInput(attrs={'required':True, 'class':'form-control'})
,'Description': forms.Textarea(attrs={'required': True, 'class':'form-control'})
,'Program': forms.TextInput(attrs={'readonly':'readonly', 'class':'form-control'})
}
html文件
{% extends 'base.html' %}
<!DOCTYPE html>
<html>
<head>
{% block head %}
<title>New Key Accomplishment</title>
{% endblock %}
</head>
<body>
{% block body %}
<div class="container">
<ol class="breadcrumb my-4">
<li class="breadcrumb-item active">
<center>{{ title }}</center>
</li>
</ol>
</div>
<br>
<div class="offset-3 col-md-6">
<form method="post">
{% csrf_token %}
<div class="form-group" style="padding-left:10%;">
{% for field in form %}
<label>{{ field.label_tag }}</label>
{{ field }}
<br>
{% endfor %}
</div>
<div class="btn" style="padding-left: 10%;">
<button type="submit">Submit</button>
</div>
</form>
</div>
{% endblock %}
</body>
</html>
{%extends'base.html%}
{%block head%}
新的关键成就
{%endblock%}
{%block body%}
{{title}}
{%csrf_令牌%}
{%形式的字段为%}
{{field.label_tag}
{{field}}
{%endfor%}
提交
{%endblock%}
您已将表单init方法的签名更改为接受请求
。不要那样做。无论如何,你们并没有使用它。但你们也不需要像那个样传递程序;为什么不干脆form=AddKeyAccompForm(initial={'Program':Program})
?嗨,丹尼尔,我以前有过这种情况,我得到了以下错误:在/AddKeyAccomp/Cybersecurity Program'Program'上的keyrerror。错误似乎来自form=AddKeyAccompForm(initial={'Program':Program})和self.Program=kwargs.pop('Program')是的,正如我所说,您不需要对kwargs执行任何操作。完全删除\uuuu init\uuuu
方法。谢谢Daniel。现在就开始工作。