/ home /中的AttributeError:' ActionCodeForm'对象没有属性' is_bound'

时间:2016-10-27 17:38:11

标签: django forms modelform

我在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"),
]

1 个答案:

答案 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)