【问题标题】:Django throws exception: ModelForm has no model class specifiedDjango 抛出异常:ModelForm 没有指定模型类
【发布时间】: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
  • 感谢你们!问题解决了。

标签: python django


【解决方案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 详细解释了这一点。

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 2013-11-22
    • 2014-05-18
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2020-12-07
    相关资源
    最近更新 更多