本站最新发布   Python从入门到精通|Python基础教程
试听地址  https://www.xin3721.com/eschool/pythonxin3721/


一、数据库中时间类型

  1.三种时间类型:DateTimeField、DataField、TimeField三种类型;在使用之前需先导入import django.utils.timezone包

  2.该三种类型分别对应这Datetime、Data、Time三种对象;

  3.时间类型,三个属性,auto_now_add、auto_now、default;这三种不能同时存在;auto_now_add在数据生成时,填入当前时间;

    auto_now在数据时更新时,时间更新;default=timezone.now默认当前时间;

BOOK
id title price publisher(ForeignKey)    
Publisher
id name addr      
Author
id name sex birthday book(m2m)  
author_book
id author_id book_id    

 

二、字段参数

1.字段参数:

  null:表示字段是否可以为空;

  unique:表示字段是否唯一;

  db_index:给字段设置索引;

  default:给字段设置默认值;

2.时间字段独有的参数

  auto_now_add:生成数据时生成数据;

  auto_now:每次更新数据时更新数据;

3.关系字段参数

  to:要关联的表

  to_field:要设置关联的字段,一般不用设置,默认情况下为关联另一张表里面的主键;

  related_name:代替反向操作的 '表名_set'

    反向操作时,

    例如:未设置该参数情况下,Publisher.objects.get(id=1).book_set.all()

    设置了related_name='stu'(BOOK表里面);Publisher.objects.get(id=1).stu.all()

  related_query_name:对反向操作的queryset时,用来'表名_set'指定里面的 '表名'

  db_constraint:取消外键约束,默认为开启约束True;2.0版本以后需要显示的声明;

  on_delete:对级联操作的一些设定:(针对ForgineKey/onetoone特有),db_constraint=False;

      models.CASCADE:删除关联数据,与之相关联的数据也一并删除;

      models.NOTHING:删除关联数据,引发IntegrityError;

      models.PROTECT:删除关联数据,报错ProtectedError;

      models.SET_NULL:删除关联数据, 与之关联的数据改为null;×为测通 报改变表结构

      models.SET_DEFAULT:删除关联数据, 与之关联数据改为默认值(前提外键设置默认值);

      models.SET:删除关联数据,
          a. 与之关联的值设置为指定值,设置:models.SET(值)
          b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

4.manytomany关系

  manytomany表的关系维护是通过第三张表author_book来维护的;

  manytomany关系涉及三张表:author表、book表、author_book表;

  三张表的关系建立(主要针对第三张表author_book)三种形式:(第三张表怎么创建[手动/自动],关联关系怎么创建[手动/自动])

    方法一:Manytomany正常指定;

    方法二:自己指定第三张表,通过ForeginKey来指定;自动创建关联关系 

    class Book(models.Model):
      title = models.CharField(max_length=32, verbose_name="书名")

    class Author(models.Model):
      name = models.CharField(max_length=32, verbose_name="作者姓名")

    # 自己创建第三张表,分别通过外键关联书和作者
    class Author2Book(models.Model):
      author = models.ForeignKey(to="Author")
      book = models.ForeignKey(to="Book")

 

      class Meta:
        unique_together = ("author", "book")

 

     方法三:自己指定第三张表,并通过 manytomany指定关联:手动创建关联关系;

      

        class Book(models.Model):
          title = models.CharField(max_length=32, verbose_name="书名")


        # 自己创建第三张表,并通过ManyToManyField指定关联
        class Author(models.Model):
          name = models.CharField(max_length=32, verbose_name="作者姓名")
          books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
        # through_fields接受一个2元组('field1','field2'):
        # 其中field1是定义ManyToManyField的模型外键的名(author),field2是关联目标模型(book)的外键名。


        class Author2Book(models.Model):
          author = models.ForeignKey(to="Author")
          book = models.ForeignKey(to="Book")

          class Meta:

            unique_together = ("author", "book")