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()
增删改

相关文章: