Django模型定义参考

字段

对字段名称的限制

  • 字段名不能是Python的保留字,否则会导致语法错误
  • 字段名不能有多个连续下划线,否则影响ORM查询操作

Django模型字段类

字段类说明
AutoField自增ID字段
BigIntegerField64位有符号整数
BinaryField存储二进制数据的字段,对应Python的bytes类型
BooleanField存储True或False
CharField长度较小的字符串
DateField存储日期,有auto_now和auto_now_add属性
DateTimeField存储日期和日期,两个附加属性同上
DecimalField存储固定精度小数,有max_digits(有效位数)和decimal_places(小数点后面)两个必要的参数
DurationField存储时间跨度
EmailField与CharField相同,可以用EmailValidator验证
FileField文件上传字段
FloatField存储浮点数
ImageField其他同FileFiled,要验证上传的是不是有效图像
IntegerField存储32位有符号整数。
GenericIPAddressField存储IPv4或IPv6地址
NullBooleanField存储True、False或null值
PositiveIntegerField存储无符号整数(只能存储正数)
SlugField存储slug(简短标注)
SmallIntegerField存储16位有符号整数
TextField存储数据量较大的文本
TimeField存储时间
URLField存储URL的CharField
UUIDField存储全局唯一标识符
字段属性

通用字段属性

选项说明
null数据库中对应的字段是否允许为NULL,默认为False
blank后台模型管理验证数据时,是否允许为NULL,默认为False
choices设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值
db_column字段对应到数据库表中的列名,未指定时直接使用字段的名称
db_index设置为True时将在该字段创建索引
db_tablespace为有索引的字段设置使用的表空间,默认为DEFAULT_INDEX_TABLESPACE
default字段的默认值
editable字段在后台模型管理或ModelForm中是否显示,默认为True
error_messages设定字段抛出异常时的默认消息的字典,其中的键包括null、blank、invalid、invalid_choice、unique和unique_for_date
help_text表单小组件旁边显示的额外的帮助文本。
primary_key将字段指定为模型的主键,未指定时会自动添加AutoField用于主键,只读。
unique设置为True时,表中字段的值必须是唯一的
verbose_name字段在后台模型管理显示的名称,未指定时使用字段的名称

ForeignKey属性

  1. limit_choices_to:值是一个Q对象或返回一个Q对象,用于限制后台显示哪些对象。
  2. related_name:用于获取关联对象的关联管理器对象(反向查询),如果不允许反向,该属性应该被设置为'+',或者以'+'结尾。
  3. to_field:指定关联的字段,默认关联对象的主键字段。
  4. db_constraint:是否为外键创建约束,默认值为True。
  5. on_delete:外键关联的对象被删除时对应的动作,可取的值包括django.db.models中定义的:
    • CASCADE:级联删除。
    • PROTECT:抛出ProtectedError异常,阻止删除引用的对象。
    • SET_NULL:把外键设置为null,当null属性被设置为True时才能这么做。
    • SET_DEFAULT:把外键设置为默认值,提供了默认值才能这么做。

ManyToManyField属性

  1. symmetrical:是否建立对称的多对多关系。
  2. through:指定维持多对多关系的中间表的Django模型。
  3. throughfields:定义了中间模型时可以指定建立多对多关系的字段。
  4. db_table:指定维持多对多关系的中间表的表名。
模型元数据选项
选项说明
abstract设置为True时模型是抽象父类
app_label如果定义模型的应用不在INSTALLED_APPS中可以用该属性指定
db_table模型使用的数据表名称
db_tablespace模型使用的数据表空间
default_related_name关联对象回指这个模型时默认使用的名称,默认为<model_name>_set
get_latest_by模型中可排序字段的名称。
managed设置为True时,Django在迁移中创建数据表并在执行flush管理命令时把表移除
order_with_respect_to标记对象为可排序的
ordering对象的默认排序
permissions创建对象时写入权限表的额外权限
default_permissions默认为('add', 'change', 'delete')
unique_together设定组合在一起时必须独一无二的字段名
index_together设定一起建立索引的多个字段名
verbose_name为对象设定人类可读的名称
verbose_name_plural设定对象的复数名称

查询参考

按字段查找可以用的条件:

  1. exact / iexact:精确匹配/忽略大小写的精确匹配查询
  2. contains / icontains / startswith / istartswith / endswith / iendswith:基于like的模糊查询
  3. in:集合运算
  4. gt / gte / lt / lte:大于/大于等于/小于/小于等于关系运算
  5. range:指定范围查询(SQL中的between…and…
  6. year / month / day / week_day / hour / minute / second:查询时间日期
  7. isnull:查询空值(True)或非空值(False)
  8. search:基于全文索引的全文检索
  9. regex / iregex:基于正则表达式的模糊匹配查询

转载于:https://www.cnblogs.com/virus1996/p/9370205.html

<think>好的,用户想了解如何在Django定义定义用户模型。我需要根据提供的引用内容来整理步骤,确保回答准确。首先,用户可能已经知道Django有内置的用户系统,但需要扩展以满足项目需求。根据引用[3],Django允许继承AbstractUser来扩展字段,比如添加职位。步骤应该是先创建模型类,然后在settings中配置AUTH_USER_MODEL。 然后,用户可能需要具体的代码示例,引用[2]提到了继承AbstractUser并添加job_title字段,还要在settings.py设置。需要强调替换内置用户模型要在首次迁移前完成,否则会有问题,这点引用里没提到,但属于常见问题,应该加入注意事项。 接下来是使用自定义用户模型,比如在admin注册,引用[2]和[3]提到需要导入并注册。同时,创建用户管理类可能也是必要的,比如使用UserAdmin,但可能需要调整表单。 另外,引用[5]提到可以继承AbstractBaseUser,但用户的问题可能更适用于常见的AbstractUser方法,所以先介绍简单的方法,再提到更高级的自定义方式。 需要分步骤说明,确保结构清晰,比如定义模型、配置设置、创建迁移、注册admin。同时生成相关问题,比如性能优化、权限系统定制等,参考用户提供的示例问题,结合引用内容中的权限系统扩展(引用[4])来生成相关问题。 检查是否有遗漏点,比如首次迁移的重要性,以及可能遇到的错误,如未正确设置AUTH_USER_MODEL导致冲突。此外,确保所有术语正确,比如AbstractUser和AbstractBaseUser的区别,引用[5]提到AbstractBaseUser更灵活但复杂,所以需要简要说明适用场景。 最后,验证步骤是否符合最佳实践,比如使用AbstractUser而不是直接继承User模型,避免后期修改困难。确保回答引用正确的来源,如引用[2]和[3]中的代码示例,引用[5]中的注意事项。</think>### Django定义用户模型创建与使用方法 #### 1. **定义定义用户模型类** Django 推荐通过继承 `AbstractUser` 或 `AbstractBaseUser` 实现自定义用户模型。 - **继承 `AbstractUser`**:适合需要保留默认字段(如用户名、密码、邮箱等)并扩展新字段的场景。 示例代码: ```python # your_app/models.py from django.db import models from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): job_title = models.CharField(max_length=100) # 新增职位字段 phone = models.CharField(max_length=20, blank=True) # 新增手机字段 ``` 通过 `AbstractUser`,可直接复用 Django 默认的用户认证逻辑[^3][^5]。 - **继承 `AbstractBaseUser`**:适合需要完全自定义认证字段(如用邮箱替代用户名)的场景,需额外实现权限管理字段。 --- #### 2. **配置 `AUTH_USER_MODEL`** 在 `settings.py` 中指定自定义用户模型: ```python AUTH_USER_MODEL = 'your_app.CustomUser' # your_app为应用名称 ``` 这一步必须在首次数据库迁移前完成,否则会导致表冲突[^2][^3]。 --- #### 3. **创建并应用数据库迁移** 运行以下命令生成迁移文件并同步到数据库: ```bash python manage.py makemigrations python manage.py migrate ``` --- #### 4. **在 Admin 后台注册模型** 在 `admin.py` 中注册自定义用户模型,以在管理后台查看和编辑: ```python # your_app/admin.py from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser admin.site.register(CustomUser, UserAdmin) # 使用默认UserAdmin管理类 ``` 若字段扩展较多,可自定义 `UserAdmin` 类以优化后台显示。 --- #### 5. **使用自定义用户模型** 在代码中通过 `get_user_model()` 动态获取用户模型: ```python from django.contrib.auth import get_user_model User = get_user_model() user = User.objects.create_user(username='test', job_title='Developer') ``` 确保所有外键关联使用 `settings.AUTH_USER_MODEL` 而非直接引用 `User` 模型[^2][^3]。 --- #### **注意事项** 1. **首次迁移前必须完成配置**:修改 `AUTH_USER_MODEL` 后,需在首次迁移前完成模型定义,否则需手动清理迁移历史。 2. **避免直接修改内置 `User` 模型**:应始终通过继承 `AbstractUser` 或 `AbstractBaseUser` 扩展功能[^3]。 3. **自定义认证后端(可选)**:若修改了认证字段(如用邮箱登录),需实现自定义认证后端。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值