python - Django:OperationalError:没有这样的列:User_profile.user_id
问题描述
我是在没有教程指导的情况下从事我的第一个“独立”项目的初学者。我一直在为我的注册页面制作两个密码确认表单,而没有使用 django.contrib.auth.forms UserCreationForm。我的个人资料模型具有一个“用户”属性,它是具有 django.contrib.auth.models 用户模型的 OneToOneField。出于某种原因,在我从前端填写注册表并检查配置文件组后,会弹出 OperationalError。这不是我第一次有“没有这样的专栏”。有人可以帮忙吗?将不胜感激。
我的用户/form.py,
from django import forms
from django.contrib.auth.models import User
class UserRegisterForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ['username', 'first_name', 'last_name', 'password']
def clean_password2(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords do not match")
return password2
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
My User/views.py,注册视图,这是我的注册表单。
def register(request):
form = UserRegisterForm(request.POST or None)
if form.is_valid():
user = form.save(commmit=False)
user = form.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(request, password=raw_password)
if user is not None:
login(request, user)
return redirect('login')
return render(request, 'User/register.html', {'form': form})
我非常简单的 User/models.py ,
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
我的用户/迁移/0001_initial.py,
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Profile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
如果您有任何贡献,我很乐意接受提供的任何信息。谢谢你。
编辑:
完整的错误回溯:
Environment:
Request Method: GET
Request URL: http://localhost:8000/admin/User/profile/
Django Version: 3.0.6
Python Version: 3.8.2
Installed Applications:
['Blog.apps.BlogConfig',
'User.apps.UserConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
return Database.Cursor.execute(self, query, params)
The above exception (no such column: User_profile.user_id) was the direct cause of the following exception:
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\contrib\admin\options.py", line 607, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\contrib\admin\sites.py", line 231, in inner
return view(request, *args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\contrib\admin\options.py", line 1796, in changelist_view
'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\models\query.py", line 258, in __len__
self._fetch_all()
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\models\query.py", line 1261, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\models\query.py", line 57, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1151, in execute_sql
cursor.execute(sql, params)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 100, in execute
return super().execute(sql, params)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\User\PycharmProjects\FirstProject\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 396, in execute
return Database.Cursor.execute(self, query, params)
Exception Type: OperationalError at /admin/User/profile/
Exception Value: no such column: User_profile.user_id
解决方案
我认为class Meta
您UserRegistrationForm
忘记正确添加密码字段
这应该是:
class Meta:
model = User
fields = ['username', 'first_name', 'last_name', 'password1','password2']
推荐阅读
- excel - 基于另一个单元格中的值的动态范围
- python - 是否有任何 python 模块可以处理扩展 ACL 中的额外用户权限,如 drwxr-x---+?
- phpstorm - “从源滚动”选项在哪里?
- sql-server - 在 SQL Server 中将小数转换为 int 会使结果列可以为空?
- javascript - Angular/Javasript:从服务器下载现有的 csv 文件
- excel - 如何使我的 VBA 代码更高效?
- php - PHP 跳过 jsonarray 中的少量数据
- sapui5 - SAP UI5 + Yarn = 不运行
- angular - 角度反应形式的错误警报出现晚了一步
- python - 如何将多维列表中的两个索引配对并与其他索引匹配