zoukankan      html  css  js  c++  java
  • Django深入学习之模型语法(model syntax)

    模型是你的网站数据信息惟一的、明确的来源。它包含你所储存数据的字段定义和行为。一般地,一个模型映射着一个惟一数据库的表单(table)。

    • 所有模型都是django.db.models.Model的子类。
    • 模型的每个属性代表着一个数据库字段
    • django会自动生成你所需要的数据库

    使用模型

    当你定义完你的数据模型,你得告诉Django你将使用它,你需要在setting.py中的INSTALLED_APPS中添加模型。

    字段

    一个模型最重要也是必须的部分 - 定义一系列的数据字段,字段由类属性来描述。注意字段名不要与模型API的一些关键字冲突,比如clean,save和delete。

    字段选项

    每一个字段都需要特定的字段说明选项来配套。比如CharField需要max_length来指明需要多大的空间来储存该字段。

    null

    如果True,Django将会在数据库中储存Null空值。默认是False。

    blank

    如果为真,这个字段允许为空,默认为False。

    注意:blank与null的区别,null是数据库相关,而blank是数据合法性相关,如果一个字段有blank=True,表单将允许一个空值的条目,如果一个字段拥有blank=False,这个字段必须存在。

    choices

    一个可迭代的2个元组作为字段选项。如果存在这样的字段,默认表单窗口部件为选项枢。

    例:

    from django.db import models
    
    class Person(models.Model):
        SHIRT_SIZES = (
            ('S', 'Small'),
            ('M', 'Medium'),
            ('L', 'Large'),
        )
        name = models.CharField(max_length=60)
        shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)

    default

    字段的默认值,这可以一个值,也可以是一个可以调用的对象,比如datetime.datetime.now()。

    help_text

    额外“help"文本以表单部件形式显示。

    primary_key

    如果为True,这个字段就是这个模型的主键。如果没有特别指明主键,那么Django会自动添加一个一个IntegerField作为主键。

    unique

    如果为True,那么这个字段在整个表单必须惟一。

    详细字段名称

    除了ForeinghKey,ManyToManyField和OneToOneField,每个字段类型都可以将详细字段名称作为第一个参数。如果没有特别指明详细字段名称,Django将会会用字段名称自动创建它。

    如果是ForeinghKey,ManyToManyField和OneToOneField,那么需要使用verbose_name作为关键字来指定详细字段名称。

    关系

    很明显,关系数据库的优势基于互相相关的数据库表单。Django提供三种常见的数据关系。多对一(many-to-one)、多对多(many-to-many)、一对一(one-to-one)。

    多对一(many-to-one)

    要定义一个多对一关系,使用django.db.models.ForeignKey。ForeignKey需要一个位置参数:与此模型相关的类。

    多对多(many-to-many)

    要定义一个多对多关系,使用ManyToManyField。ManyToManyField同样需要一个位置参数:与此模型相关的类。

    一对一(one-to-one)

    要定义一个一对一关系,使用OneToOne。OneToOneField同样需要一个位置参数:与此模型相关的类。

    跨文件模型

    模型中的字段也可以与另一个应用中的模型存在外键关系。

    字段名称限制

    • 字段名称不能是一个Python保留字段
    • 字段名称在一行里不能有超过一个下划线

    元数据选项(Meta options)

    模型的元数据通过使用内联类Meta来添加,模型的元数据是那些模型中除了字段的语句。比如排序选项(ordering),数据库表单名称(db_table)等等。

    模型属性

    一个模型最重要的属性是Manager,它是Django模型提供的数据库查询接口,用来从数据库获取对象。如果没有定义定制的Manager,那么它的默认名称是objects。

    模型方法

    有两个几乎所有模型类都会乃至的方法。

    __str__()(Python3)

    __unicode__()(python2)

    当你在交互终端或者admin界面时,上面两个方法特别有用,它们定义了,在交互终端或者admin界面模型实例如何显示的问题。

    get_absolute_url()

    这个方法告诉Django如何为对象计算URL。

    重写预定义的模型方法

    还有其它一系列封装数据库行为的模型方法,有时候需要定制。特别是常见的save()和delete()

    我们能够自由定制这些模型方法。

    模型类的继承

    模型类的继承与普通的Python类的继承并没有什么两样。

    在Django中存在3种类型的继承:

    1、抽象基类

    2、多表单继承

    3、代理继承

  • 相关阅读:
    PAT (Basic Level) Practice (中文)1022 D进制的A+B
    PAT (Basic Level) Practice (中文)1001 害死人不偿命的(3n+1)猜想
    Pycharm的调试
    Pycharm自带Git实现版本管理
    JMeter分布式压测
    JMeter内存溢出:java.lang.OutOfMemoryError: Java heap space解决方法
    JMeter资源监控插件PerfMon的使用
    JMeter命令行执行+生成HTML报告
    JMeter压测“java.net.SocketException: Socket closed”解决方法
    JMeter压测“java.net.BindException: Address already in use: connect”解决方法
  • 原文地址:https://www.cnblogs.com/tmyyss/p/4396958.html
Copyright © 2011-2022 走看看