更改会话表名称并自定义Django会话表

更改会话表名称并自定义Django会话表,django,python-3.x,django-sessions,Django,Python 3.x,Django Sessions,我的问题: from django.contrib.sessions.models import Session Session._meta.db_table = "my_session" 我正在尝试将Django会话表名称从“Django\u session”更改为其他名称“User\u session” 我的尝试: from django.contrib.sessions.models import Session Session._meta.db_table = "my_session"

我的问题:

from django.contrib.sessions.models import Session
Session._meta.db_table = "my_session"
我正在尝试将Django会话表名称从“
Django\u session
”更改为其他名称“
User\u session

我的尝试:

from django.contrib.sessions.models import Session
Session._meta.db_table = "my_session"
我把上面的代码放在项目的
\uuuu init\uuuu.py
文件中。但是我在会话中间件初始化之前调用会话时遇到了错误

我想要什么:

from django.contrib.sessions.models import Session
Session._meta.db_table = "my_session"
我需要将
django_会话
表名更改为其他一些表名,并在该表中添加一些列。尤其是,在Django项目中的代码放置位置(这一点更为重要)

注意:

from django.contrib.sessions.models import Session
Session._meta.db_table = "my_session"
我正在使用Django 2.1.11和Python 3.7


请帮助我解决这个问题。

如果您想提供自定义名称或名称,您可以在python/env站点包django/contrib/session/models中更改会话模型并更改表名。

您可以在python/env站点包django/contrib/session/models中更改会话模型并更改表名在会话表中创建自定义字段,可以执行以下步骤

定义自定义会话后端:

my_project
    my_project/
        settings.py
        session_backend.py
        ...
    user/
        models.py
        ...
从django.contrib.sessions.backends.db导入SessionStore作为DBStore
导入用户
类会话存储(DBStore):
@类方法
def get_模型_类(cls):
返回user.models.MySession
def创建模型实例(自身、数据):
"""
重写函数以使用`session[“user\u id”]=user.id`保存对数据库的更改。
这将使用自定义字段值创建模型实例。
向自定义会话模型添加更多字段时,必须更新函数
也要处理这些字段。
"""
obj=super()。创建模型实例(数据)
尝试:
user\u id=data.get('user\u id')
除了(ValueError、TypeError):
用户id=无
obj.user\u id=用户\u id
返回obj
然后在
setting.py
中导入自定义类

SESSION\u ENGINE=“我的项目。SESSION\u后端”
在应用程序的
models.py
中定义自定义模型,如
user

来自django.contrib.sessions.models导入会话
班级自我会话(会话):
#如果需要,还可以添加自定义字段,例如此用户列,它可以是用户表的FK
user=models.ForeignKey('user',on_delete=models.CASCADE)
类元:
app_label=“用户”
db\u table=“我的会话”
现在运行以下迁移命令

python manage.py makemigrations
python manage.py migrate

完成:)

如果要在会话表中指定自定义名称或创建自定义字段,可以执行以下步骤

定义自定义会话后端:

my_project
    my_project/
        settings.py
        session_backend.py
        ...
    user/
        models.py
        ...
从django.contrib.sessions.backends.db导入SessionStore作为DBStore
导入用户
类会话存储(DBStore):
@类方法
def get_模型_类(cls):
返回user.models.MySession
def创建模型实例(自身、数据):
"""
重写函数以使用`session[“user\u id”]=user.id`保存对数据库的更改。
这将使用自定义字段值创建模型实例。
向自定义会话模型添加更多字段时,必须更新函数
也要处理这些字段。
"""
obj=super()。创建模型实例(数据)
尝试:
user\u id=data.get('user\u id')
除了(ValueError、TypeError):
用户id=无
obj.user\u id=用户\u id
返回obj
然后在
setting.py
中导入自定义类

SESSION\u ENGINE=“我的项目。SESSION\u后端”
在应用程序的
models.py
中定义自定义模型,如
user

来自django.contrib.sessions.models导入会话
班级自我会话(会话):
#如果需要,还可以添加自定义字段,例如此用户列,它可以是用户表的FK
user=models.ForeignKey('user',on_delete=models.CASCADE)
类元:
app_label=“用户”
db\u table=“我的会话”
现在运行以下迁移命令

python manage.py makemigrations
python manage.py migrate

完成:)

您为什么需要这样做?会话实现是Django内部的,您不应该更改它。我将解释确切的场景。我有一个数据库,已经为不同的应用程序创建了django_会话表。现在,我们有了另一个应用程序,它需要django_会话,其中包含额外的字段。现在,我不应该使用现有的django_会话表,也不应该修改它。我应该为会话创建自己的表,并且需要存储和访问会话数据为什么需要这样做?会话实现是Django内部的,您不应该更改它。我将解释确切的场景。我有一个数据库,已经为不同的应用程序创建了django_会话表。现在,我们有了另一个应用程序,它需要django_会话,其中包含额外的字段。现在,我不应该使用现有的django_会话表,也不应该修改它。我应该为会话创建自己的表,并需要存储和访问会话数据