首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django学习-第七讲:django 中的常用字段、字段属性,外键和表关系、外键操作

1. django中的常用字段 1. AutoField 映射到数据库中是int类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动的生成一个叫做id的自动增长的主键。...比如作为一个记录修改日期的字段,可以将这个属性设置为True。 auto_now_add:在每次数据第一次被添加进去的时候,都使用当前的时间。...因为Django在处理字符串相关的Field的时候,即使这个Field的null=False,如果你没有给这个Field传递任何值,那么Django也会使用一个空的字符串""来作为默认值存储进去。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。...如果设置这个选项,前提是要指定这个字段可以为空。 4.SET_DEFAULT:设置默认值。如果外键的那条数据被删除了,那么本条数据上就将这个字段设置为默认值。

4K30

【玩转全栈】----Django连接MySQL

错误处理 自动处理,减少手动处理的错误风险。 完全依赖开发者,错误处理工作量大。 选择建议 使用 Django ORM: 开发 Django 项目时,优先选择 ORM。...例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 PyMySQL 或 raw SQL 查询。...虽然我们在models中创建的是UserInfo类,但mysqlclient处理后真正的表名是 应用名+_+类(类全小写) 所以此处表名是 app01_userinfo 创建表后还能再添加字段吗...当然是可以的 在类中再添加一个字段,输入: size = models.IntegerField() 运行后提示: 1、要是选择1的话,点击Enter,会提示让您输入一个默认值,然后那一列都将是那个默认值...2、要是选2的话,并且没有任何操作,数据库中将不会显示新加的数据。 3、选2后,在源代码中添加默认值,将会出现数据。

6500
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Django】 开发:静态文件,应用和模型层

    中的应用 - app 应用在Django项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型 创建应用app 创建步骤 用 manage.py 中的子命令 startapp 创建应用文件夹...迁移是 Django 同步您对模型所做更改(添加字段,删除模型等) 到您的数据库模式的方式 1.生成或更新迁移文件 ​ 将每个应用下的 models.py 文件生成一个中间文件,并保存在 migrations...value for this column) 2) Quit, and let me add a default in models.py Select an option: 翻译为中文如下: 您试图添加一个非空字段...'des'来预订没有默认;我们不能这样做(数据库需要填充现有行) 请选择修复: 1)现在提供一次性默认值(将对所有现有行设置此列的空值) 2)退出,让我在models.py中添加一个默认值 选择一个选项...: 错误原因 当对模型类新添加一个字段时可出现该错误 原理是 添加新字段后,数据库不知道原来已有数据对于新建字段该如何赋值,所以新增字段时,务必要添加 default 默认值。

    1.8K20

    Sentry 开发者贡献指南 - 数据库迁移

    这个 pr 只会有一个迁移,因为 Django 不再知道这些字段。...一般来说,这是不值得做的,与回报相比,这需要冒很多风险/付出很多努力。 添加列 创建新列时,它们应始终创建为可为空的。...这是出于两个原因: 如果存在现有行,添加非空列需要设置默认值,添加默认值需要完全重写表。这是危险的,很可能会导致停机 在部署期间,新旧代码混合运行。...如果表足够小并且体积足够小,那么创建一个普通的 NOT NULL 约束应该是安全的。小是几百万行或更少。 添加具有默认值的列 向现有表添加具有默认值的列是危险的。...相反,更好的选择是: 在 Postgres 中添加没有默认值的列,但在 Django 中添加默认值。这使我们能够确保所有新行都具有默认值。

    3.6K20

    37.Django1.11.6文档

    这是因为子类需要一个空间来存储不包含在基类中的字段数据。 但有时,你可能只想更改 model 在 Python 层的行为实现。比如:更改默认的 manager ,或是添加一个新方法。...如果没有匹配到正则表达式,或者如果过程中抛出一个异常,Django 将调用一个适当的错误处理视图。 请参见下面的错误处理。...在Django更改1.10.1: 较旧的版本没有CheckboxInput的例外,这意味着如果这是模型字段默认值,则未选中的复选框将接收到True的值。...比已经在初始化数据中存在的条目数目多的话, max_num对应个数的额外空表单将会被添加到表单集, 只要表单总数不超过 extra. ...所以你需要记住这个事实,你需要验证的字段可能没有通过初试的字段检查。 在这一步,有两种方法报告错误。 最简单的方法是在表单的顶端显示错误。

    24.4K80

    Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08

    Book2Author 表中的 book 字段 和 author字段 来记录的(第一个参数 book 是 关联表查 book 所依赖的字段) # 但是,多对多字段的 add set remove clear...自定义展示错误提示信息 这一般是用在前后端不分离项目中的 forms 后端定义规则并校验结果 写一个继承了 forms.Form 的类 写校验规则 写法和写模型表类极其相似,但是 forms...提交按钮需要你手动添加 input 框的 label 注释 不指定的情况下 默认用的是类中 字段的首字母大写 forms 组件其他知识点(服务器端的) 在 python console 测试 类似于django...表中的一条记录(行)针对一个浏览器 ?...在django 项目中有参数不好传时,可以放在 session 里,就全局变量一样,直接从 session 里拿就能拿到了

    2.8K20

    Django教程 —— 模型类详解

    引言 在之前的 Django模型设计 中简单的介绍了如何定义模型类,在这篇中将做一个汇总。让大家更加了解Django模型类。...: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 Django 会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...如果具有不同主键字段的模型,它还可以提高您的一致性。 模型类的字段属性及选项 模型类属性命名限制 不能是python的保留关键字。...备注 null 如果为True,表示允许为空,默认值是False。...primary_key 若为True,则该字段会成为模型的主键字段,默认值是False。 unique 如果为True, 这个字段在表中必须有唯一值,默认值是False。

    1.7K20

    博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法

    因为在 Django 1.x 的版本中,这个参数是有默认值的,但是 Django 2.x 没有指定,所以需要显示设定一个值。...规避方法 把项目中所有模型中有外键的字段都添加这个属性,添加的时候需要根据实际情况设定值。...,与之关联的值设置为null(前提该字段需要设置为可空,一对一同理) on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,...一对一同理) on_delete-models.SET(), # 删除之后执行一个函数 比如我这里添加了如下几个字段: # class Article(models.Model): author...报错分析,这个是 django 2.x 里面会出现的问题,当 urls.py 里面使用 include 的时候,当有 namespace 参数的时候,第一个参数需要添加成元组,其中第二个参数是 app_name

    98320

    后端框架学习-Django

    映射图: ORM———->DB 类———->数据表 对象——–>数据行 属性——–>字段 数据库迁移: 迁移是Django同步您对模型所做出的更改(添加字段,删除模型等)到您的数据库模式的方式。...的null不同 null:设置为True,则该列允许为空 默认为False,需要一个default选项来设置默认值 default:设置该列的默认值 db_index:设置为True,表示为该列增加索引...()方法实现删除 3.伪删除操作 通过在表里添加一个布尔型字段(is_active),默认是True;执行删除时,将欲删除数据的is_active置为False。...** ········································· from django.db.models import F 一个F对象代表数据库中某条记录的字段的信息(不直接取出来...) 作用:通常对数据库字段值在不获取的情况下进行操作,用于类属性之间的比较 F(‘列名’) 对数据库字段值在不获取的情况下进行操作: 例:需求:将Book表中所有的market_price全部自增

    9.6K40

    Django之Model操作数据库详解

    对应app目录下的models.py 1、生成一个简单的数据库表: 在未指定primary_key的情况下,Django会默认创建一个id自增字段作为主键。...null 数据库中字段是否可以为空 db_column 数据库中字段的列名 default 数据库中字段的默认值 primary_key...null(前提FK字段需要设置为可空) - models.SET_DEFAULT,删除关联数据,与之关联的值设置为默认值(...])#删除指定书籍的所有作者 b、为一个作者添加多本书 author_obj = Author.objects.filter(name="jerry")#获取名字为"jerry"的作者对象 book_obj...如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。

    7.1K10

    DjangoRestFramework,序列化组件、视图组件

    功能的页面,首先我们创建一个django项目,创建一个Course表,然后添加一些数据,然后按照下面的步骤操作, 第一步:引入drf的Response对象  from django.shortcuts...一种常见的使用场景就是在Model中存在user_id作为外键,在用户提交时,不允许提交user_id,但user_id在定义Model时又是必须字段,这种情况下就可以使用HiddenField提供一个默认值...默认值为False。 3.required required=False表示对应字段在反序列化时是非必需的。在正常情况下,如果反序列化时缺少字段,则会抛出异常。默认值为True。...4.default 给字段指定一个默认值。...,也就是说,如果我们将SerializerMethodField中的read_only改成False,那么在进行字段验证的时候,这个字段就没有被排除,也就是说,必须传给我这个authors_list名字的数据

    2.6K20

    django orm 重点大全

    = models.OneToOneField("Author") #建立的一对一的关系 2.orm字段必须要知道的一些属性 (0)null 如果为True,Django 将用NULL 来在数据库中存储空值...默认值是 False. (1)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。...如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。 (2)default 字段的默认值。可以是一个值或者可调用对象。...如果你没有指定任何一个字段的primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为, 否则没必要设置任何一个字段的primary_key...在一个给定的 model 类的实例中,想得到某个 choices 字段的显示值,就调用 get_FOO_display 方法(这里的 FOO 就是 choices 字段的名称 )。

    79740

    为什么数据库字段要使用NOT NULL?

    如果查询中包含可为NULL的列,对MySql来说更难优化,因为可为NULL的列使得索引、索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在MySql里也需要特殊处理。...当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。...举个例子,一张表中的某一条name字段是NULL,我们可以认为不知道名字是什么,反之如果是空字符串则可以认为我们知道没有名字,他就是一个空值。...而对于大多数程序的情况而言,没有什么特殊需要非要字段要NULL的吧,NULL值反而会对程序造成比如空指针的问题。...变长字段长度列表:有多个字段则以逆序存储,我们只有一个字段所有不考虑那么多,存储格式是16进制,如果没有变长字段就不需要这一部分了。

    1.9K20

    Python进阶29-ORM介绍

    get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...  删除关联数据,引发错误ProtectedError   models.SET_NULL   删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)   models.SET_DEFAULT...  删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)   models.SET   删除关联数据,   a....一对一的关联关系多用在当一张表的不同字段查询频次差距过大的情况下,将本可以存储在一张表的字段拆开放置在两张表中,然后将两张表建立一对一的关联关系。

    4.5K10

    12.Django基础十之Form和ModelForm组件

    ,我就用其中一个错误提示就可以了,再错了再提示,并且不是给你生成ul标签了,单纯的是错误文本 {{ form_obj.errors }} #这是全局的所有错误,找对应字段的错误,就要...七 ModelForm   通常在Django项目中,我们编写的大部分都是与Django 的模型紧密映射的表单。...举个例子,你也许会有个Book 模型,并且你还想创建一个form表单用来添加和编辑书籍信息到这个模型中。 在这种情况下,在form表单中定义字段将是冗余的,因为我们已经在模型中定义了那些字段。   ...error_messages = { 'title':{'required':'不能为空',} #每个字段的错误都可以写 } #如果models中的字段和咱们需要验证的字段对不齐的是...} #批量添加错误信息,这是都一样的错误,不一样的还是要单独写。

    3.4K20

    多对多关系表的创建方式、forms组件

    ='Book') #好处:可以任意的添加和修改第三张表中的字段,支持orm跨表查询 #不足:不支持add、remove、clear、set forms组件 小例子 需求:1.写一个注册页面获取用户输入的用户名和密码...(展示信息) #手动实现略 forms组件 forms组件能够做的就是上面的三件事情,在使用forms之前,我们需要先定义一个类: from django import forms class MyForm...,不会帮你渲染提交按钮,需要你自己手动添加 forms组件渲染标签方式1:封装程度太高,不推荐使用但是可以用在本地测试 {{ form_obj.as_p }} <!...钩子函数 局部钩子 局部钩子只对指定的某一个字段进行校验。...在使用选择标签时,需要注意choices的选项可以配置从数据库中获取,但是由于是静态字段 获取的值无法实时更新,需要重写构造方法从而实现choice实时更新。

    5.2K00

    Django 基础快速入门

    server 创建完毕后会有一个文件夹是 app 文件夹: app 文件夹内容如下: 作用如下: 三、注册 app 到项目中 在 Django 中,我们需要对创建的 APP 进行注册,...:8000/ 即可: 此时由于没有配置当前路由,可在端口号后面直接访问 index 即可: 五、静态模板 在 Django 中可使用对路由的处理方法跳转到对应的静态模板,此时我们在 server...再接着看 {% csrf_token %},此为 Django 中自带的 csrf token,我们需要进行添加,否则将会出现 403;最后再看 {{error_msg}} 这是一个错误提示,若没有这个传值也不会报错...,可以在执行的时候设置又或者直接设置默认值 height=models.IntegerField(default=2) # 也可以设置可为空 height=models.IntegerField(null...表示指向的某一个表的列名 # on_delete 表示在删除对应关联的表内容时,自动删除所关联的对应内容 ,级联删除 # 若想置空不删除对应所关联的内容,需要允许当前列内容为空:null=True ,

    1.7K20

    Django 学习笔记之模型(上)

    所以你安装该设配器之后,运行项目会报出错误。Django 官网建议使用替代品 mysqlclient。mysqlclient 是 MySQLdb 的一个分支,最主要是它支持 Python 3。...Django 内置了几十种内置字段类型。常用的类型如下: 1) AutoField:一个根据实际ID自动增长的 IntegerField 。如果表中没有设置主键时,将会自动添加一个自增主键。...3.4 字段选项 有些字段会有些特殊参数,但所有字段类型都又些通用的可选选项。先是常用的可选选项。 1)null :如果该参数设置为 True,Django将会把数据库中的空值保存为 NULL。...不填写就默认为 False。 2)blank:如果为 True ,该字段允许为空值,不填写默认为 False。这个字段是用于处理表单数据输入验证。...5)default:设置该字段的默认值。 6)由二项元组构成的一个可迭代对象(列表或元组),用来给字段提供选择项。 如果设置了 choices,默认的表单将是一个选择框。

    1.8K30
    领券