Django - ModelForm未指定模型类
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上搜索类似的问题,但大多数解决方案指向了拼写错误。我仔细检查了我的代码,相当确定我拼写正确并符合惯例。
我做错了什么?感谢任何帮助。谢谢。
问题出现的原因是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类的问题。