You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django实时聊天项目注册报错求助:Unknown field(s) (password1,password2)

Django注册表单FieldError问题解决

我正在为大学项目开发一款实时聊天应用,选用Django作为Web框架,看中它的灵活性。开发过程中解决了不少错误,但当前这个问题卡壳了,求助。

相关代码

forms.py

from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import User
from django.db import models
from django import forms

class SignupForm(UserChangeForm):
    class Meta:
        model = User
        fields = ['username', 'password1', 'password2']

urls.py

from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    path('members/', views.members, name='members'),
    path('', views.frontpage, name='frontpage'),
    path('signup/', views.signup, name='signup'),
    path('login/', auth_views.LoginView.as_view(template_name='members\login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

views.py

from django.contrib.auth import login
from django.shortcuts import render, redirect

from .forms import SignUpForm

def frontpage(request):
    return render(request, 'members\frontpage.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request)
            return redirect('frontpage')
    else:
        form = SignUpForm()
    return render(request, 'members/signup.html', {'form': form})

models.py

from django.db import models
from django.contrib.auth.models import User

class User(models.Model):
    username = models.CharField(max_length=255, blank= True, editable=True) 
    password1 = models.CharField(max_length=30, null=True, blank=True, editable= True)
    password2 = models.CharField(max_length=30, null=True, blank=True, editable= True)

错误信息

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1073, in _bootstrap_inner
    self.run()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1010, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\utils\autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\core\management\commands\runserver.py", line 133, in inner_run
    self.check(display_num_errors=True)
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\core\management\base.py", line 486, in check
    all_issues = checks.run_checks(
                 ^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\core\checks\registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
    return check_resolver(resolver)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
    return check_method()
           ^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\urls\resolvers.py", line 519, in check
    for pattern in self.url_patterns:
                   ^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\utils\functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\urls\resolvers.py", line 738, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
                       ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\utils\functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\urls\resolvers.py", line 731, in urlconf_module
    return import_module(self.urlconf_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\importlib\__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "C:\Users\bdjam\OneDrive\Bureau\project\chat\chat\urls.py", line 21, in <module>
    path('', include('members.urls')),
             ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\urls\conf.py", line 39, in include
    urlconf_module = import_module(urlconf_module)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.1008.0_x64__qbz5n2kfra8p0\Lib\importlib\__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "C:\Users\bdjam\OneDrive\Bureau\project\chat\members\urls.py", line 3, in <module>
    from . import views
  File "C:\Users\bdjam\OneDrive\Bureau\project\chat\members\views.py", line 5, in <module>
    from .forms import SignUpForm
  File "C:\Users\bdjam\OneDrive\Bureau\project\chat\members\forms.py", line 6, in <module>
    class SignupForm(UserChangeForm):
  File "C:\Users\bdjam\OneDrive\Bureau\project\chatapp\Lib\site-packages\django\forms\models.py", line 332, in __new__
    raise FieldError(message)
django.core.exceptions.FieldError: Unknown field(s) (password1, password2) specified for User

错误原因

  1. 模型冲突:自定义了User模型,同时又导入了Django自带的auth.User,导致代码混淆。而且Django自带的User模型并没有password1、password2字段,这两个字段是UserCreationForm提供的表单字段,不属于模型本身。
  2. 表单选型错误:用UserChangeForm做注册表单不合适,这个表单是用来修改已有用户信息的,注册应该用专门的UserCreationForm,它内置了password1和password2的字段及密码验证逻辑。
  3. 类名大小写不一致:forms.py里的表单类是SignupForm,但views.py里导入的是SignUpForm,会导致导入错误。
  4. 路径转义问题:Windows下用反斜杠\作为路径分隔符可能触发转义,导致模板找不到。

解决方案

1. 修正models.py

删掉自定义的User模型,直接使用Django自带的auth.User即可。如果需要扩展用户模型,应该继承AbstractUser而非重新定义同名模型。

# models.py
from django.db import models
# 移除自定义的User类,无需重复定义

2. 修正forms.py

替换表单基类为UserCreationForm,并统一类名为SignUpForm:

# forms.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms

class SignUpForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'password1', 'password2']

3. 修正路径分隔符

将urls.py和views.py中的反斜杠\替换为正斜杠/:

urls.py修改:

path('login/', auth_views.LoginView.as_view(template_name='members/login.html'), name='login'),

views.py修改:

def frontpage(request):
    return render(request, 'members/frontpage.html')

4. 验证逻辑

views.py中的注册逻辑无需大改,现在表单会自动处理密码验证,调用form.save()会自动加密密码并创建用户。

内容的提问来源于stack exchange,提问作者Aymen Bensalah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:47:01