问题描述
我正在将应用程序从Java迁移到Django。由于此应用程序具有旧版数据库,我该如何在不更改其架构的情况下将现有表(成员)用于Django身份验证。
下面是成员表
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
--------------------+------------------------+-----------+----------+---------+----------+--------------+-------------
member_id | bigint | | not null | | plain | |
membertypeid | integer | | | | plain | |
email | character varying(100) | | | | extended | |
password | character varying(100) | | | | extended | |
challenge_question | character varying(100) | | | | extended | |
challenge_answer | character varying(100) | | | | extended | |
datedisabled | character varying(255) | | | | extended | |
disabled | boolean | | | | plain | |
profiletype | integer | | | | plain | |
我尝试过的是
from django.contrib.auth.models import (
AbstractBaseUser,PermissionsMixin,BaseUserManager
)
class UserManager(BaseUserManager):
def _create_user(self,email,password,**extra_fields):
"""
Creates and saves a User with the given email and password.
"""
if not email:
raise ValueError('The given email must be set')
try:
user = self.model(email=email,**extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
except:
raise
def create_user(self,password=None,**extra_fields):
return self._create_user(email,**extra_fields)
def create_superuser(self,password=password,**extra_fields)
class User(AbstractBaseUser,PermissionsMixin):
member_id = models.BigIntegerField(primary_key=True)
membertypeid = models.IntegerField(blank=True,null=True)
email = models.CharField(max_length=100,blank=True,null=True,unique=True)
password = models.CharField(max_length=100,null=True)
challenge_question = models.CharField(max_length=100,null=True)
challenge_answer = models.CharField(max_length=100,null=True)
datedisabled = models.CharField(max_length=255,null=True)
disabled = models.BooleanField(blank=True,null=True)
profiletype = models.IntegerField(blank=True,null=True)
objects = UserManager()
USERNAME_FIELD = 'email'
def save(self,*args,**kwargs):
super(User,self).save(*args,**kwargs)
return self
class Meta:
db_table = "members"
managed = False
我得到的错误是-
python manage.py createsuperuser
Email: a@b.com
Traceback (most recent call last):
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/backends/utils.py",line 84,in _execute
return self.cursor.execute(sql,params)
psycopg2.errors.UndefinedColumn: column members.last_login does not exist
LINE 1: SELECT "members"."last_login","members"."is_superuser","me...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py",line 21,in <module>
main()
File "manage.py",line 17,in main
execute_from_command_line(sys.argv)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/core/management/__init__.py",line 381,in execute_from_command_line
utility.execute()
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/core/management/__init__.py",line 375,in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/core/management/base.py",line 323,in run_from_argv
self.execute(*args,**cmd_options)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/contrib/auth/management/commands/createsuperuser.py",line 61,in execute
return super().execute(*args,**options)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/core/management/base.py",line 364,in execute
output = self.handle(*args,**options)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/contrib/auth/management/commands/createsuperuser.py",line 95,in handle
error_msg = self._validate_username(username,verbose_field_name,database)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/contrib/auth/management/commands/createsuperuser.py",line 201,in _validate_username
self.usermodel._default_manager.db_manager(database).get_by_natural_key(username)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/contrib/auth/base_user.py",line 44,in get_by_natural_key
return self.get(**{self.model.USERNAME_FIELD: username})
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/manager.py",line 82,in manager_method
return getattr(self.get_queryset(),name)(*args,**kwargs)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/query.py",line 402,in get
num = len(clone)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/query.py",line 256,in __len__
self._fetch_all()
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/query.py",line 1242,in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/query.py",line 55,in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch,chunk_size=self.chunk_size)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/models/sql/compiler.py",line 1097,in execute_sql
cursor.execute(sql,params)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/backends/utils.py",line 99,in execute
return super().execute(sql,line 67,in execute
return self._execute_with_wrappers(sql,params,many=False,executor=self._execute)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/backends/utils.py",line 76,in _execute_with_wrappers
return executor(sql,many,context)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/backends/utils.py",params)
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/utils.py",line 89,in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/amity/.local/share/virtualenvs/drf-jwt-auth-RVtih8KZ/lib/python3.8/site-packages/django/db/backends/utils.py",params)
django.db.utils.ProgrammingError: column members.last_login does not exist
LINE 1: SELECT "members"."last_login","me...
注意-我无法在表格中添加额外的列
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)