首页 > 解决方案 > 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

标签: pythondjango

解决方案


我认为class MetaUserRegistrationForm忘记正确添加密码字段

这应该是:

class Meta:
        model = User
        fields = ['username', 'first_name', 'last_name', 'password1','password2']

推荐阅读