Django formset不使用django-widget-tweaks渲染

时间:2016-12-24 12:44:29

标签: django django-forms django-widget-tweaks

每当我使用'LoginForm' object has no attribute 'as_widget'时,我都会收到错误formset。我真的不知道是什么问题,因为表格正常呈现正常的Django表单。我试图看看formsetdjango-widget-tweaks的哪些特征会给{% render_field field class="form-control" placeholder=field.label %}带来这个问题,但到目前为止很难弄清楚。我在HTML代码中的class LoginForm(ModelForm): user_login = forms.HiddenInput() prefix = 'prefix_login' class Meta: model = Usermie fields = ['email', 'password'] widgets = {'password': forms.PasswordInput(), 'email': forms.EmailInput()} 收到错误。

forms.py:

def manage_articles(request):
    article_formset = formset_factory(LoginForm)
    book_formset = formset_factory(SignUpForm)
    if request.method == 'POST':
        if 'login' in request.POST:
            login = article_formset(request.POST, request.FILES, prefix='login')

            if login.is_valid():
                email = request.POST.get('prefix_login-email', '')
                password = request.POST.get('prefix_login-password', '')

                # Return a user_obj object if the username and password are valid
                # otherwise it will return null, the null variable is called None in python
                user_obj = auth.authenticate(email=email, password=password)
                # return HttpResponse("inside form if condition")
                if user_obj is not None:
                    if user_obj.is_active:
                        login_usermie(request, user_obj)
                        return HttpResponseRedirect('/home/')
                    else:
                        # pass
                        return HttpResponse("Your account is inactive.")

        elif 'signup' in request.POST:
            signup = book_formset(request.POST, request.FILES)
            if signup.is_valid():
                pass
    else:
        login = article_formset
        signup = book_formset
        return render(request, 'usermie/formtest.html', {
            'login': login,
            'signup': signup,
        })

views.py

<div class="navbar navbar-default nav-links navbar-static-top page-nav">
<div class="container">
    <a class="mini-navbar navbar-brand" href="/">
        <img src="http://i.imgur.com/GAQSCtB.png" width="25"
             alt="Driven Car Sales Logo"
             class="img-rounded logo-nav mini-navbar" />
    </a>
    <ul class="nav navbar-nav nav-form-out pull-right">
        <li>
            <form class="navbar-form navbar-form-out login" action="" method="POST">
                {% csrf_token %}
                {% load widget_tweaks %}
                {% for field in login %}
                    {% if login.errors %}
                        <div class="form-group">
                            <label class="sr-only" for="{{ field.auto_id }}">{{ field.label }}</label>

                            {% render_field field class="form-control" placeholder=field.label %}
                            {% if field == login.password %}
                                {% for hidden in field.hidden_fields %}
                                    {{ hidden }}
                                {% endfor %}
                            {% endif %}
                            <div class="help-block with-errors">{{ field.errors }}</div>
                        </div>
                    {% else %}
                        <div class="form-group">
                            <label class="sr-only" for="{{ field.auto_id }}">{{ field.label }}</label>

                            {% render_field field class="form-control" placeholder=field.label %}

                            {% if field == login.password %}
                                {% for hidden in field.hidden_fields %}
                                    {{ hidden }}
                                {% endfor %}
                            {% endif %}
                        </div>
                    {% endif %}
                {% endfor %}
                <div class="checkbox">
                    <label>
                        <input type="checkbox"> Remember me
                    </label>
                </div>
                <button type="submit" name="action" value="login" class="btn btn-default">Sign in</button>
            </form>
       </li>
    </ul>
</div>

HTML:

<form class="signup" method="POST" action="">
{% csrf_token %}
{{ signup.as_p }}   
<button name='action' value='signup' type="submit">Sign up</button>
</form>

www.example.com

1 个答案:

答案 0 :(得分:2)

模板中的

login变量是一个formset。所以当你做以下时:

{% for field in login %}
     {% render_field field class="form-control" placeholder=field.label %}
{% endfor %} 

您的表单为field值,而不是字段。 尝试这样做:

{% for form in login %}
     {% for field in form %}
         {% render_field field class="form-control" placeholder=field.label %}
     {% endfor %} 
{% endfor %}