我在Django管理员之外为我的Django webapp创建了一个主页。我希望主页有一个非常简单的ModelForm,在提交时会写入数据库。
我在/ home /目前收到以下错误,但不确定如何解决。
/ home /' ActionCodeForm'中的AttributeError对象没有属性 ' is_bound'
我知道绑定和未绑定的表单并已阅读文档,但我不确定如何实际实现它们。
这是我的模特:
class ActionCode(models.Model):
action_code = models.CharField(blank=False, max_length=10,
verbose_name="Action Code")
这是我的ModelForm
:
class ActionCodeForm(ModelForm):
class Meta:
model = ActionCode
fields = ('action_code',)
def __init__(self, *args, **kwargs):
super(ActionCodeForm).__init__(*args, **kwargs)
以下是我的观点:
def action_code_form(request):
if request.method == 'GET':
form = ActionCodeForm()
else:
form = ActionCodeForm(request.POST)
if form.is_valid():
action_code = form.cleaned_data['action_code']
form.save()
else:
form = ActionCodeForm()
return render('action_code_form.html', {'form': form},
context_instance=RequestContext(request))
这是我的模板action_code_form.html
:
<form method="post" action="">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Submit"/>
</form>
urls.py
:
from home.views import action_code_form
urlpatterns = [
url(r'^home/', action_code_form, name="home"),
]
答案 0 :(得分:1)
只有在方法为POST
时,您才需要检查表单是否有效。此外,render()
的第一个参数必须是request
您的观点应如下:
def action_code_form(request):
form = ActionCodeForm()
if request.method == 'POST':
form = ActionCodeForm(request.POST)
if form.is_valid():
action_code = form.cleaned_data['action_code']
form.save()
return render(request, 'action_code_form.html', {'form': form})
如果您需要在模型表单中覆盖__init__()
,那么您应该将self
作为第二个参数添加到super()
(如果您不需要保留以下两行没有任何要添加到表单的特定行为):
def __init__(self, *args, **kwargs):
super(ActionCodeForm, self).__init__(*args, **kwargs)