如何创建可存储到Django admin的本地表单及相关报错求助
问题排查与修复方案
1. Registrationform相关报错修复
核心错误为Registrationform导入路径错误,同时存在多处代码逻辑缺陷:
- 原views.py中
from templates.forms import Registrationform导入路径错误:templates目录用于存放HTML模板,forms.py应该存放在accounts应用根目录下,修改为相对导入from .forms import Registrationform即可 - 多余导入清理:forms.py中
from django.db import models、from django.db.models import fields两行无实际使用,可直接删除 - 补充register视图POST分支返回逻辑:原代码中POST请求下如果表单验证失败,没有返回响应,会触发服务器错误
- 补充edit_profile视图的参数传递:原代码else分支渲染模板时没有传入
args参数,会导致前端无法获取表单对象
修改后的views.py完整代码
from django.shortcuts import render,redirect from .forms import Registrationform from django.contrib.auth.models import User from django.contrib.auth.forms import UserChangeForm def home(request): numbers = [1,2,3,4,5] name = 'max' args = {'myName': name,'numbers':numbers} return render(request, 'accounts/home.html',args) def register(request): if request.method == 'POST': form = Registrationform(request.POST) if form.is_valid(): form.save() return redirect('/account') else: form = Registrationform() # 统一移出分支,避免表单验证失败无响应的问题 args = {'form':form} return render(request,'accounts/reg_form.html',args) def view_profile(request): args ={'user':request.user} return render(request,'accounts/profile.html',args) def edit_profile(request): if request.method == 'POST': form = UserChangeForm(request.POST, instance=request.user) if form.is_valid(): form.save() return redirect('/account/profile') else: form = UserChangeForm(instance=request.user) args={'form':form} # 补充传入args参数 return render(request,'accounts/edit_profile.html', args)
修改后的forms.py完整代码
from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm class Registrationform(UserCreationForm): email = forms.EmailField(required=True) class Meta: model = User fields = ( 'username', 'first_name', 'last_name', 'email', 'password1', 'password2' ) def save(self, commit=True): user = super(Registrationform, self).save(commit=False) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.email = self.cleaned_data['email'] if commit: user.save() return user
2. module 'accounts.views' has no attribute 'profile'报错修复
该错误是路由配置与视图函数名不匹配导致:
你在urls.py中配置的路由指向了views.profile,但实际视图函数命名为view_profile,直接修改urls.py中的对应配置为views.view_profile即可解决。
3. views偶尔无法导入问题排查
按以下顺序逐一核对即可定位问题:
- 确认
accounts应用已经添加到项目settings.py的INSTALLED_APPS列表中 - 确认
accounts应用目录下存在__init__.py文件(Python3可为空文件,用于标识目录为Python包) - 确认所有导入路径使用正确的相对/绝对导入,避免跨应用导入时路径拼写错误
- 检查代码是否存在循环导入:例如views导入forms的同时,forms也导入了views的内容
- 确认文件名无拼写错误:例如不要将
views.py误写为view.py,forms.py误写为form.py
内容的提问来源于stack exchange,提问作者panti
相关产品推荐
相关产品推荐

