django给sqlite自带的user表添加字段(django+pycharm+ubuntu+sqlite3)

本文介绍如何在Django中自定义用户模型,通过继承AbstractUser类创建包含更多字段的用户信息表,如QQ号、邮箱、真实姓名等,并演示了如何在settings.py中配置AUTH_USER_MODEL指向自定义模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原理:

基于sqlite自带的user表就继承自AbstractUser,我们可以通过继承内置的 AbstractUser 类,来定义一个自己的user表,即可根据项目需求灵活的设计用户表,又能使用Django强大的认证系统。

二、前期准备:

(运行是通过ubuntu的anaconda环境运行的)

1、确保删除之前sqlite3里创建的所有数据表

以下是SQLiteStudio实现可视化,但并无法对导入的数据表进行操作

因此,我们可以通过ubuntu(xshell连接)进入内置sqlite运行命令行:sqlite3  你的sqlite3数据库

删除所有表:(drop table 表名;)

2、删除你的所有app的migrations下除__init__.py外的所有文件。

3、确认所有清理完成后,再在相应文件编写代码如下:

你的app下的models.py:(注意了,不可以用原来的表名user即不可建立model名为User,这里用的是UserInfo

from django.contrib.auth.models import AbstractUser
# 新用户表
class UserInfo(AbstractUser):
    username = models.CharField(max_length=50, verbose_name='用户名', unique=True)#用户名
    password = models.CharField(max_length=100,verbose_name= '密码')#密码
    qq = models.CharField(max_length=20, verbose_name='QQ号')#qq
    email = models.EmailField(max_length=254)#邮箱
    name=models.CharField(max_length=50,verbose_name='姓名')#真实姓名
    gender = models.CharField(choices=(('male', '男'), ('female', '女')), default='female', max_length=5)#性别
    age=models.IntegerField(verbose_name='年龄')#年龄
    image = models.ImageField(upload_to='img/%Y/%m', max_length=100)#/media/img/上传头像
    # role = models.CharField(max_length=10, default='user', choices=(('user', '普通用户'), ('admin', '管理员'), ('vip', 'VIP')))
    last_active = models.DateField(auto_now_add=True)#最后活动时间
    created_time = models.DateTimeField(auto_now_add=True)#创建时间
    last_login = models.DateTimeField(null=True)#登录时间

    class Meta:
        ordering = ['-id']
        verbose_name = '用户信息'
        verbose_name_plural = '用户信息'

    def __str__(self):
        return self.username

2、修改settings.py增加AUTH_USER_MODEL=你的app名.UserInfo参数,即是告诉Django,现在使用新定义的UserInfo表来做用户认证:

还有,上传图片的:

3、要在你的app下的admin.py登记注册,不然密码会变成明文,无法加密存储:

from . import models
from django.contrib.auth.admin import UserAdmin
admin.site.register(models.UserInfo, UserAdmin)

将以上文件上传好

三、创建新用户表

运行以下命令:

python  manage.py   makemigrations

python  manage.py   migrate

效果如下:

四、有可能出现的问题

到这里已经差不多成功了,但是运行时有可能还会报错:

raise ValueError("Dependency on app with no migrations: %s" % key[0])

ValueError: Dependency on app with no migrations: index

打开PyCharm的manage.py Task,

输入:makemigrations  你的APP名(这里应是makemigrations  index,以下为例子不符合这里,仅作示例),如下:

最后再运行:python  manage.py   migrate,迁移数据就可以更新数据库了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值