2013-05-23 2 views
0

Я пытаюсь подклассировать форму входа, чтобы добавить дополнительное поле для входа, но не может его отобразить. Я использую мезонин для проекта.Подклассификация LoginForm

Вот что у меня есть для моего forms.py:

from mezzanine.accounts.forms import LoginForm 
from django import forms 


CLINICS = (
('', '——–'), 
('1', 'Main'), 
('2', 'Secondary'), 
('3', 'Backend'), 
     ) 


class myLoginForm(LoginForm): 
    clinic_select = forms.ChoiceField(choices=CLINICS) 

Это мой views.py:

from django.contrib.auth import (authenticate, login as auth_login, 
              logout as auth_logout) 
from django.contrib.auth.decorators import login_required 
from django.contrib.messages import info, error 
from django.core.urlresolvers import NoReverseMatch 
from django.http import Http404 
from django.shortcuts import get_object_or_404, redirect, render 
from django.utils.translation import ugettext_lazy as _ 

from accounts.forms import myLoginForm 
from mezzanine.utils.urls import login_redirect 


def login(request, template="templates/accounts/account_login.html"): 
    """ 
    Login form. 
    """ 
    form = myLoginForm(request.POST or None) 
    if request.method == "POST" and form.is_valid(): 
     authenticated_user = form.save() 
     info(request, _("Successfully logged in")) 
     auth_login(request, authenticated_user) 
     return login_redirect(request) 
    context = {"form": form, "title": _("CaregoLite Log In")} 
    return render(request, template, context) 

И это мой urls.py:

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from mezzanine.core.views import direct_to_template 
from django.views.generic.base import View 

url("^$", "accounts.views.login", name="home"), 
#url("^$", direct_to_template, {"template": "index.html"}, name="home"), 

По какой-то причине, хотя я не могу получить эту подклассовую форму для показа. В моем отладке я вижу, что единственный запрос var сделан для mezzanine.accounts.views.login.

Что-то не в порядке с моим кодом?

Спасибо.

+2

Вы проверили, как шаблон выводит форму? Возможно, это поле по полю вместо цикла или as_p. –

+0

Он делает это: {% блок%} Основной

{{название}} <форма метод = "пост" {%, если form.is_multipart%} ENCTYPE = "многочастному/форм-данных" {% ENDIF% }> { % fields_for форма%}
{%}% концевым блоком – Tom

+0

@tbonejo Похоже, антресоли использует свой собственный [ 'mezzanine.forms'] (http://mezzanine.jupo.org/docs/ packages.html # module-mezzanine.forms) вместо Django 'django.forms', поэтому вам может понадобиться использовать другой метод для добавления новых полей в формы по умолчанию. – Aya

ответ

1

В приведенном выше примере, который очень сильно отличается от того, что мы обсуждали вне SO, ваш шаблон url вызывает «accounts.views.login». Вероятно, это должен быть appname.views.login или views.login, если ваш view.py находится в корне вашего проекта.