zoukankan      html  css  js  c++  java
  • django之models模块使用

    定义模型

    将数据库表定义成类,集成models.Model

    from django.db import models
    # Create your models here.
    class Author(models.Model):
        name=models.CharField(max_length=100)

    django会自动生成id字段作为主键,如果不定义主键的话

    2,使用模型

    将使用manage.py startapp XXX 创建的应用加入到setting下的INSTALLED_APPS下面,注意它为元组,别忘记后面的逗号

    确保运行命令manage.py migrate,可以事先使用manage.py makemigrations 给应用生成迁移脚本。

    3,字段

    字段类型

    模型中的每一个字段是field子类的实例

    CharField和TextField字段都是最基本的保存文本的字段,其中Charfield是指定固定长度的,另一个是无限长的

    DataField和DatatimeField字段是保存时间的字段

    FileField是保存文件路径的字段

    也可以自己自定义字段类型

    字段选项

    Null,如果为True,则将数据库中空值保存为NULL,默认为False

    Blank,如果为True,则表单的验证允许为空值,默认为False,他是表单输入验证范畴的

    Choice,由二维元组提供一些选项,设置了choice,表单是一个选择框,而不是文本框

    Default,字段的默认值,可以是一个值或者可调用对象

    Help_text,表单部件额外显示的帮助信息

    Primary_key,如果为True,则该字段为主键,如果表中没有设置该值,django自动生成Id字段为主键

    Unique,如果为True,这个数据字段在整个表中都是唯一的

    关系

    Django提供了最常见的三种数据库关系:多对一,多对多,一对一

     多对一关系

    Django使用 django.db.models.ForeignKey 定义多对一关系,和使用其他字段类型一样,在模型中把它作为类的属性包含进来

    class Author(models.Model):
        name=models.CharField(max_length=100)

    class Book(models.Model):
        title=models.CharField(max_length=100)
        author=models.ForeignKey(Author)  #定义了多对一的关系
        length=models.IntegerField()

    若要创建一个递归的关联 —— 对象与自己具有多对一的关系 —— 请使用models.ForeignKey('self')。

    如果你需要关联到一个还没有定义的模型,你可以使用模型的名字而不用模型对象本身:

    from django.db import models
    class Car(models.Model):
        manufacturer = models.ForeignKey('Manufacturer')
    class Manufacturer(models.Model):
        # ...
    Pass

    多对多关系

    ManyToManyField 用来定义多对多关系,用法和其他Field 字段类型一样:在模型中做为一个类属性包含进来。

    在哪个模型中使用ManytoManyField并不重要,在两个模型中任选一个即可,不用两个模型都设置

    class Book(models.Model):
        title=models.CharField(max_length=100)
        author=models.ForeignKey(Author)
        length=models.IntegerField()

    class classify(models.Model):
        name=models.CharField(max_length=100)
        books=models.ManyToManyField(Book) #定义多对多的关系
    也可以按照数据库sql定义多对多关系的形式,在定义另一个模型,对两个模型设置外键
     

    一对一关系

    OneToOneField用来定义一对一关系。 用法和其他字段类型一样:在模型里面做为类属性包含进来。

    class Author(models.Model):
        name=models.CharField(max_length=100)

    class Authorinfo(models.Model):
        phone=models.CharField(max_length=20)
        add=models.CharField(max_length=300)
        sex=models.CharField(choices=sex_choice)
        author=models.OneToOneField(Author)

    模型方法

    可以在模型上定义自定义的方法来给你的对象添加自定义的“底层”功能。Manager 方法用于“表范围”的事务,模型的方法应该着眼于特定的模型实例。

    如def __str__(self) #适用于python3

    Return xxx

    对于python2使用

    Def __unicode__(self)

             Return xxx

    多表集成

    Django的model中提供表之间的集成关系,每一层级下面的models是一个完整的model。在父表中的字段在字表中都有效,只是没有保存在字表中

    具体的用法参考官网

  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/hellowcf/p/7453124.html
Copyright © 2011-2022 走看看