1、常用字段
AutoFiled
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)
CharField
字符类型,必须提供max_length参数, max_length表示字符长度。
这里需要知道的是Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段,但是Django允许我们自定义新的字段,下面我来自定义对应于数据库的char类型
自定义char字段:
from django.db import models
class MyCharField(models.Field):
def __init__(self, max_length, *args, **kwargs):
self.max_length = max_length
super().__init__(max_length=max_length,*args, **kwargs)
def db_type(self, connection):
return 'char(%s)' % self.max_length
class MyModel(models.Model):
my_field = MyCharField(32)
DateField
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例
DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。
2、字段参数
null
用于表示某个字段可以为空, null=True
unique
如果设置为unique=True 则该字段在此表中必须是唯一的 。
db_index
如果db_index=True 则代表着为此字段设置索引。
default
为该字段设置默认值
1.3 DateFiled 和 DateTimeFiled 里的参数
auto_now_add
配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_now
配置上auto_now=True,每次更新数据记录的时候会更新该字段。
2、关系字段
2.1 ForeignKey
外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。
ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。
字段参数
to : 设置要关联的表
to_field : 设置要关联的表的字段
on_delete : 当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE : django 2.0 版本后必须加上后,删除关联数据,与之关联的数据也会被删除,在2.0以前,系统默认加上了
db_constraint : 是否在数据库中创建外键约束,默认为True。
2.2 OneToOneField
通常一对一字段用来扩展已有字段。(通俗的说就是一个人的所有信息不是放在一张表里面的,简单的信息一张表,隐私的信息另一张表,之间通过一对一外键关联)
字段参数:
to : 设置要关联的表
to_field : 设置要关联的字段
on_delete : 当删除关联表的数据时,当前表与其关联的行为
3、在app下的tests文件下进行运行测试,配置相关参数如下
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day58.settings")
import django
django.setup()
from app01 import models # 这一句话必须在这下面导入
4、对表数据的增删改
新增 基于create创建 user_obj = models.User.objects.create(name='json',age=28,register_time='2019-6-6') print(user_obj.register_time) 基于save创建 user_obj = models.User(name='tank',age=10,register_time='2014-3-1') user_obj.save() from datetime import datetime ctime = datetime.now() models.User.objects.create(name='tank',age=22,register_time=ctime) 修改 方式一 基于对象 user_obj = models.User.objects.filter(name='michael').first() # print(user_obj,type(user_obj)) user_obj.age = 24 user_obj.save() 方式二 基于queryset models.User.objects.filter(name='egon').update(age=36) 删除 基于queryset models.User.objects.filter(name='tank').delete() 基于对象 user_obj = models.User.objects.filter(name='tank').first() user_obj.delete()