【发布时间】:2015-12-30 17:23:04
【问题描述】:
我正在使用 Django 框架,但它抛出了这个异常:ModelForm has no model class specified.
这是我的代码:
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')
【问题讨论】:
-
你的
class Meta缩进是这样的吗?如果是这样,那么您需要将其缩进一级,因为class Meta属于表单类。 -
另外,python 类应该使用驼峰式,变量名应该全部小写并带有下划线,所以你的表单应该是
LoginForm。看 pep8 定义:python.org/dev/peps/pep-0008/#class-names -
如果我将 Meta 类写入 LoginForm 类,它会抛出 indentationError 异常
-
那么你的缩进不正确,可能是你把tab和空格混在一起了。 docs.djangoproject.com/en/1.9/topics/forms/modelforms
-
感谢你们!问题解决了。