首页
学习
活动
专区
圈层
工具
发布

自定义 Django的User Model,扩展 AbstractUser类注意事项

你应该使用django.contrib.auth.get_user_model()来引用用户模型————指定的自定义用户模型或者User from django.contrib.auth import...get_user_model   User = get_user_model() 当你定义一个外键或者到用户模型的多对多关系是,你应该使用AUTH_USER_MODEL设置来指定自定义的模型。...3.指定自定义的用户模型 3.1 Django 期望你自定义的 User model 满足一些最低要求: 模型必须有一个唯一的字段可被用于识别目的。...然而,你也需要覆写一些django.contrib.auth.models.AbstractUser 字段的定义不在你自定义用户模型中的。...7.自定义用户和权限 如果想让在自定义用户模型中包含Django的权限控制框架变得简单,Django提供了PermissionsMixin。

6.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    django 关于User模型

    扩展用户模型: Django内置的User模型虽然已经足够强大了。但是有时候还是不能满足我们的需求。比如在验证用户登录的时候,他用的是用户名作为验证,而我们有时候需要通过手机号码或者邮箱来进行验证。...那么这时候我们就需要扩展用户模型了。扩展用户模型有多种方式。这里我们来一一讨论下。 1. 设置Proxy模型: 如果你对Django提供的字段,以及验证的方法都比较满意,没有什么需要改的。...继承自AbstractBaseUser模型: 如果你想修改默认的验证方式,并且对于原来User模型上的一些字段不想要,那么可以自定义一个模型,然后继承自AbstractBaseUser,再添加你想要的字段...如何使用这个自定义的模型:比如以后我们有一个Article模型,需要通过外键引用这个User模型,那么可以通过以下两种方式引用。 第一种就是直接将User导入到当前文件中。...示例代码如下: from django.db import models from django.conf import settings class Article(models.Model):

    1.4K30

    15.Django基础十一之认证系统

    比如在验证用户登录的时候,他用的是用户名作为验证,而我们有时候需要通过手机号码或者邮箱来进行验证。还有比如我们想要增加一些新的字段。那么这时候我们就需要扩展用户模型了。扩展用户模型有多种方式。...= models.CharField(max_length=11) # 错误写法 class Meta: proxy = True # proxy正确用法是给模型添加自定义方法...同时还要继承PermissionsMixin 如果你想修改默认的验证方式,并且对于原来User模型上的一些字段不想要,那么可以自定义一个模型,然后继承自AbstractBaseUser,再添加你想要的字段...# settings.py AUTH_USER_MODEL = 'youappname.User' 如何使用这个自定义的模型:比如以后我们有一个Article模型,需要通过外键引用这个User模型...写法如下: # 引用Django自带的User表,继承使用时需要设置,这样django就知道从我们的app名的应用下的models文件中去查找UserInfo这张表了 AUTH_USER_MODEL =

    2.5K20

    探索 PythonDjango 支持分布式多租户数据库,如 Postgres+Citus

    为了能够扩展 django,必须对模型进行一些简单的更改。...让我们考虑这个简化的模型: from django.utils import timezone from django.db import models class Country(models.Model...在所有主键和唯一约束中包含 account_id 2.1 将 account_id 包含到主键中 Django 会自动在模型上创建一个简单的 “id” 主键,因此我们需要通过自己的自定义迁移来规避这种行为...在 settings.py 中,将数据库引擎改为 django-multitenant 提供的自定义引擎: 'ENGINE': 'django_multitenant.backends.postgresql...要在你的 models.py 文件中做到这一点,你需要执行以下导入 from django_multitenant.mixins import * 以前我们的示例模型仅继承自 models.Model

    2.6K10

    django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

    django应用的每个模型至少拥有一个 管理器。 管理器类的工作方式在 执行查询文档中阐述,而这篇文档涉及了自定义管理器行为的模型选项。...默认管理器 如果你使用了自定义 管理器对象,要注意 Django 中的第一个 管理器 (按照模型中出现的顺序而定) 拥有特殊的地位。...如果普通的朴素管理器类(django.db.models.Manager)并不适用于你的应用,那么你可以通过在管理器类中设置 use_for_related_fields ,强制 Django 在你的模型中使用默认的管理器...下面就是 Django 如何处理自定义管理器和模型继承(model inheritance)的: 定义在非抽象基类中的管理器是 不会 被子类继承的。...在自动管理器实例中编写正确的管理器 在上面的django.contrib.gis 已经提到了, use_for_related_fields这个特性是在需要返回一个自定义查询集子类的管理器中使用的。

    1.4K20

    django 1.8 官方文档翻译:2-1-1 模型语法

    按照上面的方式,在Pizza 的表单中将允许用户选择不同的Toppings。 另见 完整的示例参见多对多关系模型示例。 ManyToManyField 字段还接受别的参数,在模型字段参考中有详细介绍。...模型的方法 可以在模型上定义自定义的方法来给你的对象添加自定义的“底层”功能。Manager 方法用于“表范围”的事务,模型的方法应该着眼于特定的模型实例。...例如,下面的模型具有一些自定义的方法: from django.db import models class Person(models.Model): first_name = models.CharField...这表示自定义的模型类应该继承django.db.models.Model。...CommonInfo 模型无法像一般的Django模型一样使用,因为它是一个抽象化基础类。它无法生成数据表单或者管理器,并且不能实例化或者储存。 对很多用户来说, 这种类型的模型继承就是你想要的。

    5.8K20

    【云+社区年度正文】Django从入门到精通No.2----模型

    django从入门到精通No.2----模型 一、前言 学过orm系统自然之道模型的重要性,很多web站点都需要与数据库交互,这个时候模型的设计就显得尤为重要,一个好的模型会使得项目方便管理并且易于维护...models.IntegerField() 用于制作模型的每个类都必须继承models.Model类,然后我们会使用字段来对数据进行记录,django中有很多字段,如下: 字段类 默认小组件 说明 AutoField...(字典类型) validators:自定义错误验证(列表类型) 注:数据参考来源w3cschool 四、关联关系 django提供了三种数据库关联关系,即多对一,一对一,多对多,废话不多说,就是干。...的数据操作,django内置了一款非常到位的系统管理员登陆设计系统,首先我们创建下用户,如下: python manage.py createsuperuser 然后我们按照要求一步步设置参数,如图:...六、总结 以上就是django所有的关于模型的概念了,接下来小编将通过与数据库交互来带着大家一起操作表。

    2.7K00

    Django 模型继承 BaseModel

    模型继承 模型继承在 Django 中与普通类继承在 Python 中的工作方式几乎完全相同,但也仍应遵循本页开头的内容。这意味着其基类应该继承自 django.db.models.Model。...对很多用户来说,这种继承可能就是你想要的。它提供了一种在 Python 级抽出公共信息的方法,但仍会在子类模型中创建数据表。...如果你在继承父类模型的子类中添加了这些关联,你 必须 指定 related_name 属性。假如你忘了,Django 会抛出一个合法性错误。...代理对象存在的全部意义是帮你复用原 Person 提供的代码和自定义的功能代码(并未依赖其它代码)。不存在什么方法能在你创建完代理后,帮你替换所有 Person (或其它)模型。...参见 自定义管理器和模型继承。

    2.8K10

    django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

    通常来说,每个模型都对应数据库中的一张表。 基础: 每个模型都是django.db.models.Model类的子类。 模型的每个属性都表示数据库中的一个字段。...使用模型 一旦你定义了模型,就要通知Django启用这些模型,你要做的就是修改配置文件中的INSTALLED_APPS 设置,在其中添加models.py所在应用的名称。...Django 根据字段类的类型确定以下信息: 数据库当中的列类型 (比如,INTEGER, VARCHAR)。 Django 的用户管理界面所使用的部件(widget)。...自定义字段类型 如果 Django 自带的字段类型不能满足你的应用,或者你希望使用一些不常见的数据库列类型,那你可以创建自定义的字段类型。...Django 自带的 User model 没有定义排序设置(这是故意为之,是因为排序开销极大,我们不想在获取用户时浪费额外资源)。

    3.8K30

    Django项目知识点(四)

    本来今天不想发文的,昨天没发,怪不好意思的 django view URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应。...校验参数 # 3.1 创建表单对象 # UserModelForm在form.py自定义的 form = UserModelForm(put_data,...shell 调试 在model中,Django通过给Model增加一个objects属性来提供数据操作大的接口。...() 如果我要拿这个模型通过外键绑定的另外一个模型,使用select_related course 模型定义了teacher字段绑定teacher模型 course = Course.objects.only...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的外键的app的model拿。

    2K30

    Django中ORM介绍和字段及其参数

    在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。...() Model   在Django中model是你数据的单一、明确的信息来源。...通常,一个模型(model)映射到一个数据库表, 基本情况: 每个模型都是一个Python类,它是django.db.models.Model的子类。 模型的每个属性都代表一个数据库字段。...比如你在其他地方写了一个模型类,而这个模型类是属于myapp的,那么你这是需要指定为: app_label='myapp' db_table db_table是用于指定自定义数据库表名的。...Django有一套默认的按照一定规则生成数据模型对应的数据库表名,如果你想使用自定义的表名,就通过这个属性指定,比如: table_name='my_owner_table' 若不提供该参数, Django

    3.6K80

    django 自带 user 字段扩展及头像上传

    《django入门:环境及项目搭建》 《django入门:数据模型》 《django入门:视图及模版》 《django入门:Admin管理系统及表单》 《django入门:通用视图类重构视图》 《用django...写接口(入门篇)》 《用django写接口(优化篇)》 《用django写接口(实战篇)》 1 扩展 django 的 User Model 字段 在实际项目中,django 自带的 user model...User, related_name="profile", on_delete=models.CASCADE) phone_num = models.CharField(max_length=20...User Model 然后将 settings.py 文件中的 AUTH_USER_MODEL 替换后再进行数据库迁移,需要告诉 django 系统,这个项目我要用自己的 User 了,不用你的。...为自定义的 User Model 通过 2 , 3 方法扩展 User Model 后,当别的表和 User 表有链表结构的时候,最好通过 settings.AUTH_USER_MODEL 进行导入,

    2.7K30
    领券