2015-12-30 53 views
0

我正在使用Django Framework並引發此異常:ModelForm沒有指定模型類。Django拋出異常:ModelForm沒有指定模型類

這是我的代碼:

views.py

from django.contrib.auth import authenticate, login, logout 
from django.shortcuts import redirect 
from DjangoApp1.forms import login_form 
from django.shortcuts import render #For render templates 

def login_view(request):  

    form = login_form() 
    context = { 'form': form, 'mensaje':'Logeandose'} 

    if request.method == 'POST':   
     form = login_form(request.POST)  
     usuario = request.POST.get('username') 
     contrase = request.POST.get('password') 
    # Hacer el login 
     user = authenticate(username=usuario, password=contrase) 
     if user is not None and user.is_active: 
      login(request, user) 
      context['mensaje'] = u'Logeado como %s, contraseña %s' % (usuario, contrase) 
     else: 
      context['mensaje'] = u'No usuario o contraseña incorrecta' 

    return render (request, 'DjangoApp1/login.html', context) 

而且models.py那裏從來就登錄表單:

models.py

from django.contrib.auth.models import User 
from django import forms 

class login_form(forms.ModelForm): 
    username = forms.SlugField (max_length=8, 
          label='Usuario: ') 
    password = forms.SlugField (max_length=8, 
         widget=forms.PasswordInput(), 
         label='Contraseña:', 
         help_text='Hasta 8 letras') 

class Meta: 
    model = User 
    fields = ('username', 'password') 
+2

是你的'類Meta縮進嗎?如果是這樣,那麼你需要將它縮小一級,因爲'class Meta'屬於表單類。 –

+0

另外,python類應該使用camelcase,變量名應該全部使用下劃線,所以你的表單應該是'LoginForm'。看看pep8的定義:https://www.python.org/dev/peps/pep-0008/#class-names –

+0

如果我把Meta類寫入LoginForm類,它會拋出一個indentationError異常 –

回答

1

您需要縮進class Meta,因爲它是模型形式類定義的一部分:

class login_form(forms.ModelForm): 
    username = forms.SlugField (max_length=8, 
          label='Usuario: ') 
    password = forms.SlugField (max_length=8, 
         widget=forms.PasswordInput(), 
         label='Contraseña:', 
         help_text='Hasta 8 letras') 
    class Meta: 
     model = User 
     fields = ('username', 'password') 

Django doc解釋了這個中的細節。