Django - ModelForm未指定模型类

32 浏览
0 Comments

Django - ModelForm未指定模型类

Django给我返回了以下错误:

ModelForm没有指定模型类

Traceback

Traceback (most recent call last):
  File "C:\Users\Laila\.virtualenvs\BlogProject-71CaIFug\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "C:\Users\Laila\.virtualenvs\BlogProject-71CaIFug\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Laila\.virtualenvs\BlogProject-71CaIFug\lib\site-packages\django\contrib\auth\decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "D:\Programming\Python\Projects\Django\BlogProject\django_project\users\views.py", line 35, in profile
    userUpdateForm = UserUpdateForm()
  File "C:\Users\Laila\.virtualenvs\BlogProject-71CaIFug\lib\site-packages\django\forms\models.py", line 356, in __init__
    raise ValueError("ModelForm has no model class specified.")
Exception Type: ValueError at /profile/
Exception Value: ModelForm has no model class specified.

以下是我的代码:

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile
class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()
    # 一个指定表单将要与之交互的模型的类
    class Meta:
        model = User
        # 表单中希望的字段及其顺序:
        fields = ['username', 'email', 'password1', 'password2']
# 模型表单是一个允许创建与特定数据库模型配合使用的表单
class UserUpdateForm(forms.ModelForm):
    model = User
    fields = ['username', 'email']
class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['image']

views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm, UserUpdateForm, ProfileUpdateForm
from django.contrib.auth.decorators import login_required
def register(request):
    # 如果收到POST请求,则使用该POST数据实例化一个用户创建表单
    if request.method == 'POST':
        # 创建一个具有请求POST数据的表单:
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, 'Your account was created. You are now able to log in')
            return redirect('login')
    # 对于其他任何请求,创建一个空的用户创建表单
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})
@login_required
def profile(request):
    userUpdateForm = UserUpdateForm()
    profileUpdateForm = ProfileUpdateForm()
    context = {
        'userUpdateForm': userUpdateForm,
        'profileUpdateForm': profileUpdateForm
    }
    return render(request, 'users/profile.html', context)

我花了几个小时在stackoverflow上搜索类似的问题,但大多数解决方案指向了拼写错误。我仔细检查了我的代码,相当确定我拼写正确并符合惯例。

我做错了什么?感谢任何帮助。谢谢。

0
0 Comments

问题出现的原因是Django - ModelForm没有指定model类。解决方法是在ModelForm的Meta类中添加model属性,指定所关联的model类。

解决方法如下:

class UserUpdateForm(forms.ModelForm):
  class Meta:
    model = User
    fields = ['username', 'email']

将以上代码添加到ModelForm中,其中model属性指定了关联的model类为User,fields属性指定了需要在表单中显示的字段为'username'和'email'。

通过添加model属性,可以解决Django - ModelForm没有指定model类的问题。

0