问题:在Django中新插入一条数据之后,后面还需返回其自增的主键(ID)的值,从而完成后面的操作 修改前: sign_id = models.IntegerField(primary_key=True...) 解决: 将IntegerField 换成 AutoField 修改后: sign_id = models.AutoField(primary_key=True) 用法: 例如对象名为Book book...= Book(name='C语言', price=25.5) book.save() print('新书插入后返回的ID: %d', book.id) 结果 新书插入后返回的ID: 1
Django模型 Django的模型定义在models.py文件中。模型是MVT中的M,也相当于MVC中的M。 在Django中,模型必须继承自Model类。...django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...默认创建的主键列属性为id,也可以使用pk,意为primary key. 字段名称中不能出现双下划线,因为这是Django的查询语法之一。...,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期...外键:通过使用models.ForeignKey来设置外键,ForeignKey的第一个参数是要关联的模型类名,第二个参数是on_delete。
CREATE TABLE这个SQL语句在这个例子中由PostgreSQL来实现, 使用models 一旦你定义好了你的模型,你需要告诉Django你将要使用这些models。...每个模型需要明确一个字段作为主键。 verbose字段 除了ForeignKey,ManyToManyField和OneToOneField,每个字段都有一个可选的设置参数:详细。...需要第一个参数为model类对象,所以如果要使用verbose_name,需要显式地声明: 一个惯例就是verbose_name的第一个字母一般不写成大写的形式。...Many-to-one 使用django.db.models.ForeignKey来定义Many-to-one这种关系。这个类的使用和其他字段的定义一样,也是作为一个属性存在。...做法就是在当前文件中以导入类的方式导入你想要使用的外部的model,然后直接使用即可: 字段的名称限定 Django对于字段的限制有两个: 字段的名称不能为Python的关键字,这个比较好理解,举例如下
常用字段 (1) AutoField 自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。...如果需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。...Django会在DELETE CASCADE上模拟 SQL约束的行为,并删除包含ForeignKey的对象。 **DO_NOTHING:**不采取行动。...**PROTECT:**通过引发ProtectedError的子类来防止删引用的对象,是django.db.IntegrityError的子类。...Django会自动创建中间的链接表来表示多对多的关系。
模型字段 序列本身由正好两个项目的迭代项组成(例如,[(A,B),(A,C)…]),作为该字段的选择。如果给出了选择,它们将通过模型验证来执行。...,Django将添加一个方法来检索字段当前值的可读名称。...注意,选择可以是任何序列对象——不一定是列表或元组。这允许动态构建选择。然而,如果发现自己将芯片魔法更改为动态,则最好使用带有ForeignKey的适当数据库表。芯片用于静态数据。...如果没有为模型中的任何字段指定主键_Key=True,Django将自动添加一个字段来保存主键,因此不需要在任何字段上设置主键_Key=True,除非想覆盖默认主键行为。...一个对象只允许有一个主键。 主键字段是只读的。如果更改现有对象的主键值并保存它,则会在旧对象旁边创建一个新对象。
这是纯粹的验证操作,外键和多对多操作使用它来决定两个对象之间是否应该允许一个关联。...然而,如果p 的主键在second数据库上已经在使用second 数据库中的已经存在的对象将在p保存时被覆盖。 你可以用两种方法避免这种情况。首先,你可以清除实例的主键。...多数据库上使用原始游标 如果你正在使用多个数据库,你可以使用django.db.connections来获取特定数据库的连接(和游标):django.db.connections是一个类字典对象,它允许你使用别名来获取一个特定的连接...为了保持两个对象之间的关联,Django 需要知道关联对象的主键是合法的。如果主键存储在另外一个数据库上,判断一个主键的合法性不是很容易。...对于常见的多数据库架构,将这些对象放在多个数据库中没有什么用处。常见的数据库架构包括primary/replica 和连接到外部的数据库。
1. django中的常用字段 1. AutoField 映射到数据库中是int类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动的生成一个叫做id的自动增长的主键。...模型中Meta配置 对于一些模型级别的配置。我们可以在模型中定义一个类,叫做Meta。然后在这个类中添加一些类属性来控制模型的作用。...) 以上使用ForeignKey来定义模型之间的关系。...即在article的实例中可以通过author属性来操作对应的User模型。这样使用起来非常的方便。...ForeignKey后,就能通过author访问到对应的user对象呢。
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。...为了把数据库表中的数据表示成python对象,django使用一种直观的方式:一个模型类代表数据库的一个表,一个模型的实例代表数据库表中的一条特定的记录。...要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的 model 为止。...')) 主键查询的简捷方式 为使用方便考虑,Django 用 pk 代表主键”primary key”。...为某个查询指定某个值的时候,你可以使用一个类实例,也可以使用对象的主键值。
引言 在之前的 Django模型设计 中简单的介绍了如何定义模型类,在这篇中将做一个汇总。让大家更加了解Django模型类。...: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 Django 会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后...默认创建的主键列属性为 id,可以使用 pk 代替,pk 全拼为 primary key。 注意:pk是主键的别名,若主键名为id2,那么pk是id2的别名。...参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。...参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
在 Citus 中分发数据 将 Django 应用程序更新为范围查询 使用中间件自动化 更多 在 确定分布策略 中,我们讨论了在多租户用例中使用 Citus 所需的与框架无关的数据库更改。...将租户列介绍给我们想要分发的缺少它的模型 更改分布式表的主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...在所有主键和唯一约束中包含 account_id 2.1 将 account_id 包含到主键中 Django 会自动在模型上创建一个简单的 “id” 主键,因此我们需要通过自己的自定义迁移来规避这种行为...实际项目中的模型也可能继承自其他 mixin,例如 django.contrib.gis.db,这很好。 此时,您还将引入 tenant_id 来定义哪一列是分布列。...分布式表和本地表之间的外键,需要使用 models.ForeignKey(MyModel, on_delete=models.CASCADE, db_constraint=False) 来删除约束。
会为表增加自动增长的主键列,每个模型只能有一个主键列, 如果使用选项设置某属性为主键列后, 则django不会再生成默认的主键列 ·属性命名限制 ·遵循标识符规则 ·由于django...的子类 6) ·一个根据实际ID自动增长的IntegerField, 通常不指定如果不指定,一个主键字段将自动添加到模型中 ·CharField(max_length=字符长度)...(查询) Django默认通过模型的objects对象实现模型数据查询。...会为表增加自动增长的主键列,每个模型只能有一个主键列, 如果使用选项设置某属性为主键列后, 则django不会再生成默认的主键列 ·属性命名限制 ·遵循标识符规则 ·由于django..., 通常不指定如果不指定,一个主键字段将自动添加到模型中 ·CharField(max_length=字符长度) ·字符串,默认的表单样式是 TextInput ·TextField
将通过关联的模型的主键排序。...如果不传递任何值给values_list(),它将返回模型中的所有字段,以在模型中定义的顺序。 常见的情况是获取某个模型实例的特定字段值。...还可以使用正常连接语法来执行相关字段的相关字段。...update_or_create方法尝试通过给出的kwargs 去从数据库中获取匹配的对象。 如果找到匹配的对象,它将会依据defaults 字典给出的值更新字段。...的ForeignKey使用SQL约束ON DELETE CASCADE,任何具有指向要删除的对象的外键的对象将与它们一起被删除。
详见自增主键字段。 主键字段是只读的。如果你在一个已存在的对象上面更改主键的值并且保存,一个新的对象将会在原有对象之外创建出来。...多对一关系 Django 使用 django.db.models.ForeignKey 定义多对一关系。和使用其它字段类型一样:在模型当中把它做为一个类属性包含进来。...用法和其他字段类型一样:在模型里面做为类属性包含进来。 当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对一关系。 OneToOneField要一个位置参数:与模型关联的类。...不过现在已经不这么做了(不过要是你愿意的话,你仍可以传递 primary_key参数来创建主键字段)。所以一个 模型 中可以有多个OneToOneField 字段。...代理模型 使用 多表继承时,model 的每个子类都会创建一张新数据表,通常情况下,这正是我们想要的操作。这是因为子类需要一个空间来存储不包含在基类中的字段数据。
定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django...会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 属性命名限制 不能是python的保留关键字 由于django的查询方式...BooleanField,默认值为False 字段类型 AutoField:一个根据实际ID自动增长的IntegerField,通常不指定 如果不指定,一个主键字段将自动添加到模型中 BooleanField...:小数点后的数字位数 FloatField:用Python的float实例来表示的浮点数 DateField[auto_now=False, auto_now_add=False]):使用Python的...可以维护递归的关联关系,使用'self'指定,详见“自关联” 用一访问多:对象.模型类小写_set bookinfo.heroinfo_set 用一访问一:对象.模型类小写 heroinfo.bookinfo
上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。 注意:pk是主键的别名,若主键名为id2,那么pk是id2的别名。...:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。...primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
二、模型的定义 模型可以定义储存数据的字段和值,比如我们在进行表单提交的时候,一些注册信息就可以利用模型来进行管理,然后统一提交到数据库中。简单来说,模型是与数据库有关的操作集合。...models.Model类,然后我们会使用字段来对数据进行记录,django中有很多字段,如下: 字段类 默认小组件 说明 AutoField N/A 根据 ID 自动递增的 IntegerField,...必填参数primary_key=True,则成为数据库的主键,无该字段时,django自动创建,一个model不能有两个该字段。...,你可以指定一个中介模型来定义多对多关系,可以将其它字段放在中介模型中,源模型的字段使用through参数指向中介模型。...六、总结 以上就是django所有的关于模型的概念了,接下来小编将通过与数据库交互来带着大家一起操作表。
Django模型层的字段类型Django模型层的字段类型决定了数据库中字段的数据类型。在Django中,每个模型都是由字段构成的。这些字段描述了模型的属性,并指定了它们在数据库中的数据类型。...is_published = models.BooleanField(default=False)ForeignKeyForeignKey是一个存储其他模型的主键的字段类型。...例如,以下代码定义了一个存储作者的ForeignKey:from django.db import modelsclass Article(models.Model): # ......= models.CharField(max_length=100) # ...在这个例子中,Article模型中的author字段是一个ForeignKey,它引用了另一个模型Author的主键...在创建Article对象时,我们需要指定一个Author对象,或者使用Author对象的ID。
增删改 一对多:先一后多,外键可以为对象或依赖表的主键(publish and book) publish = Publish.objects.create() Book.objects.create(...) book.author 增:book.author.add(作者对象们|主键们) 删: clear()清除 remove() 可删除单个作者 改: set([作者对象们|主键们]) 2....high_price 50; 聚合查询—基于ORM 聚合函数的使用场景: 单独使用:不分组,只查聚合结果 分组使用: 按字段分组,可查分组字段与聚合结果 导入聚合函数: from django.db.models...ForeignKey(): 外键字段 to= 关联模型类 (一对多) to_file = 关联字段,省略默认关联主键 on_delete (外键关联数据被删除时的操作) models.CASCADE...(本身字段,关联字段) 断开外键关联的ForeignKey使用(一对多,一对一) # 一对多查询 —-(publish and book) # 方式一 : 不使用外键,在book 中添加 publish_id
自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性...., 则在表中会为此字段创建索引,默认值是False. default 默认值 primary_key 若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用...如果你没有指定任何一个字段的primary_key=True,Django 就会自动添加一个IntegerField 字段做为主键,所以除非你想覆盖默认的主键行为,否则没必要设置任何一个字段的primary_key...主键字段是只读的。如果你在一个已存在的对象上面更改主键的值并且保存,一个新的对象将会在原有对象之外创建出来。...我们所需要的模型创建好了, 下面就需要 Django 按照我们所定义的模型类来创建对应的数据库表.
上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。...在官方文档中,关于字段类型的描述非常多,如下: 模型字段的定义属性 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列...默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。 注意:pk是主键的别名,若主键名为id2,那么pk是id2的别名。...自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。...primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
领取专属 10元无门槛券
手把手带您无忧上云