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

Django小技巧22: 设计一个好的模型

PEP8规范, 广泛用于 Python 领域, 因此建议你在项目中使用它. 除了 PEP8 , 更喜欢Django编程风格....模型的定义是单个对象的表示, 而不是公司的集合. 这通常会导致混淆,因为我们倾向于通过数据库思考。模型最终被翻译成table.该表使用其复数形式命名的....在 DJango ,我们可以通过Company.objects来访问集合. 可以通过定义models.Manager重命名objects属性....在数据库级别上, 该字段可以为 NULL, 但在应用程序级别上, 它是必填字段(前提你通过 Django 标准的 Form 进行判断)。...这里是 Django 支持的所有字段类型. 如果你代码风格规范感兴趣, 可以读一读Django Coding Style. 当然也可以看一看Flake8.

86920

Django Model字段(field)的各种选项说明

timezone auto_now = True # 对于上一次修改日期(last_modifiel date),可以设置 EmailField() 邮件字段 unique = True # 一般Email用于用户名应该是唯一的...= True” “limit_choices_to = ” # 如果有必要,可以设置 related_name = xxx # 便于反向查询 举例: xxx = models.ForeignKey(xxx...(to,**options) 多多关系 to # 必须只想其他模型 symmetrical = False # 如果多多关系不是对称的,可以设置 through = ‘intermediary model...# 如果需要建立中间模型来搜集更多信息,可以设置 related_name = xxx # 便于反向查询 补充知识:django 使用annotate定义字段后排序翻页重复的问题 objs = A.objects.annotate...= A.objects.annotate(number=Sum(‘b__number’)).order_by(‘-number’, ‘id’) 以上这篇Django Model字段(field

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

Django 模型继承 BaseModel

很多用户来说,这种继承可能就是你想要的。它提供了一种在 Python 级抽出公共信息的方法,但仍会在子类模型创建数据表。...related_name 和 related_query_name 要格外小心 若你在 外键 或 多多字段 使用了 related_name 或 related_query_name,你必须为该字段提供一个...多表继承 Django 支持的第二种模型继承方式是层次结构的每个模型都是一个单独的模型。每个模型都指向分离的数据表,且可被独立查询和创建。...如果你在继承父类模型的子类添加了这些关联,你 必须 指定 related_name 属性。假如你忘了,Django 会抛出一个合法性错误。...在 Django 模型字段通常不允许这样做。如果一个非抽象模型基类有一个名为 author 的字段,你就不能在继承自该基类的任何类,创建另一个名为 author 的模型字段或属性。

2K10

ORM常用字段介绍

大家好,又见面了,是你们的朋友全栈君。 Django的ORM Django项目使用MySQL数据库 1....", "NAME": "你的数据库名称", # 需要自己手动创建数据库 "USER": "数据库用户名", "PASSWORD": "数据库密码",...本示例的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值得注意的是,Django会根据配置文件中指定的数据库后端类型来生成相应的SQL语句。...(反向查询)时,我们会这么写: models.Classes.objects.first().student_set.all() 当我们在ForeignKey字段添加了参数 related_name...ManyToManyField 用于表示多多的关联关系。在数据库通过第三张表来建立关联关系。 字段参数 to 设置要关联的表 related_name 同ForeignKey字段。

2.5K10

完整的 Django 零基础教程|初学者指南 - 第 3 部分 转自:维托尔·弗雷塔斯

来说,这是难以处理在在例子你读一个概念 Class A和 Class B,或者当我看到经典的 foo(bar)例子。不想和你做那种事。...另一个需要注意的有趣的事情是,在 Topic 模型,我们现在有一个名为posts()的操作 (一个类方法**)** 。...我们将通过实现反向关系来实现这一点,其中 Django 将自动在数据库执行查询以返回属于特定主题的所有帖子 的列表。 好的,现在足够的 UML!...该用户 模型已经定义了一个内置的应用程序命名的权威性 ,这是我们列出 INSTALLED_APPS的配置命名空间下django.contrib.auth 。...在 Post模型,该 updated_by字段设置 related_name='+'. 这告诉 Django 我们不需要这种反向关系,所以它会忽略它。

2.1K40

探索 PythonDjango 支持分布式多租户数据库, Postgres+Citus

将租户列介绍给我们想要分发的缺少它的模型 更改分布式表的主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...为了能够扩展 django,必须模型进行一些简单的更改。...一旦您开始分片数据,这就会成为一个问题,特别是当您对嵌套模型本例的任务)运行 UPDATE 或 DELETE 查询时。 1....更新模型以使用 TenantModelMixin 和 TenantForeignKey 接下来,我们将使用 django-multitenant 库将 account_id 添加到外键,以便以后更轻松地查询应用程序...将 Django 应用程序更新为范围查询 上一节讨论的 django-multitenant 库不仅对迁移有用,而且简化应用程序查询也很有用。该库允许应用程序代码轻松地将查询范围限定为单个租户。

2K10

Django 学习笔记之模型高级用法(上)

自己近期也总做了下总结,将花大概两篇的篇幅来分享下模型的一些高级用法。 如果想熟悉 Django 的用法,认为应该一开始要熟悉一些细节用法,后面再了解 Django 的实现原理。...4) related_name 用于关联对象反向引用模型的名称。主要用于反向查询,即外键源模型实例通过管理器返回第一个模型的所有实例。...要确保页面不存在 XXS 漏洞,需要使用 django.utils.html.escape() 对内容进行转义。...如果用户没有定义该选项, Django会自动将自动创建,内容是该字段属性名的下划线转换为空格的结果。...而没有主动设置时,则是 first name: first_name = models.CharField(max_length=30) 对于外键、多多和一一字字段,由于第一个参数需要用来指定关联的模型

2K30

Django ORM模型:想说爱你不容易

不过,Django的ORM模型有自己的一套语法,有时候会觉得别扭。这里聊一下自己的体会。 模型设计 这一部分算处理得比较好的部分。...Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...需要注意的是,在Django ORM,只能通过ForeignKey来定义多一关系,不能显示地定义一多关系。但你可以使用模型对象的*_set语法来反向调用多一关系。...由于不能显式地表达两个模型之间的关系,模型之间的关系看起来不够明了。特别是读代码时,第一个类定义完全没法提示一多的关系。必须要看到了第二个类定义,才能搞明白两个模型之间的关系。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回时并不会真正进行数据库操作。

77120

djangorelated_name的用法说明

就要看看他买了的什么宝贝!...下面我们根据上面的小情节定义两个模型,分别是买主模型以及水果模型,一个买主对应多个水果模型,简单的一模型: class Buyer(models.Model): name = models.CharField....first() #然后通过‘_set'方法获得子表的数据: fruits = buyer.fruit_set.all() """ django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到所有属于主表的子表的信息...而related_name就实现这个功能,在字表定义外键时,增加related_name字段指定这个字表在主表对应的外键属性, 如下: class Fruit(models.Model): buyer...100).first() #然后通过子表自定义的外键获取子表的所有信息: fruits = buyer.buyer_fruit.all() 以上这篇djangorelated_name的用法说明就是小编分享给大家的全部内容了

2.3K20

Django ORM模型:想说爱你不容易

不过,Django的ORM模型有自己的一套语法,有时候会觉得别扭。这里聊一下自己的体会。 模型设计 这一部分算处理得比较好的部分。...Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...需要注意的是,在Django ORM,只能通过ForeignKey来定义多一关系,不能显示地定义一多关系。但你可以使用模型对象的*_set语法来反向调用多一关系。...由于不能显式地表达两个模型之间的关系,模型之间的关系看起来不够明了。特别是读代码时,第一个类定义完全没法提示一多的关系。必须要看到了第二个类定义,才能搞明白两个模型之间的关系。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回时并不会真正进行数据库操作。

62620

Django ORM模型:想说爱你不容易

不过,Django的ORM模型有自己的一套语法,有时候会觉得别扭。这里聊一下自己的体会。 模型设计 这一部分算处理得比较好的部分。...Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...需要注意的是,在Django ORM,只能通过ForeignKey来定义多一关系,不能显示地定义一多关系。但你可以使用模型对象的*_set语法来反向调用多一关系。...由于不能显式地表达两个模型之间的关系,模型之间的关系看起来不够明了。特别是读代码时,第一个类定义完全没法提示一多的关系。必须要看到了第二个类定义,才能搞明白两个模型之间的关系。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回时并不会真正进行数据库操作。

1.2K80

django写接口(实战篇)

作者:Kuky_xs 博客:https://www.jianshu.com/u/9fcd71535294 系列文章 《django入门:环境及项目搭建》 《django入门:数据模型》 《django入门...首先我们需要安装过滤器的模块 pip install django-filter 然后我们需要将过滤器模块到 settings.py 的 INSTALLED_APPS 进行注册才可以使用。...title="xxxxxx"&format=json 进行访问,可以得到筛选的结果。但是有个问题就是只能精确查询才可以,如果你输入的参数不完整,就查询不到,接下来,我们尝试着完成模糊查询。...字段,author 我们使用 django 自带的 User 类, # 我们通过 ForeignKey 进行关联两个 Model,related_name 为反向引用, # 即我们在...permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsPostAuthorOrReadOnly) 当我们通过别的用户名该接口做修改信息的操作

2K20

Django学习笔记之ORM多表操作

作者详情模型和作者模型之间是一一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email。...注意事项:  表的名称myapp_modelName,是根据 模型的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的  对于外键字段,Django 会在字段名上添加"_id" 来创建数据库的列名...定义好模型之后,你需要告诉Django _使用_这些模型。你要做的就是修改配置文件的INSTALL_APPSZ设置,在其中添加models.py所在应用的名称。...Django 提供 F() 来做这样的比较。F() 的实例可以在查询引用字段,来比较同一个 model 实例两个不同字段的值。...: Book.objects.all().update(price=F("price")+30) Q查询 filter() 等方法的关键字参数查询都是一起进行“AND” 的。

2.8K40

美多商城项目(四)

注意:如果直接将用户的id放在验证链接,可能会发生恶意的请求。比如其他人在链接后面1,2,3.....一个接一个的尝试。解决办法就是将用户的信息进行加密,然后把加密之后的内容放在验证链接后面。...7.1在用户模型类User添加方法用于生成用户的邮箱验证连接地址。 7.2封装一个函数,使用celery异步发送邮件。...token= 参数: 通过查询字符串传递 响应: { "message":"OK" } 代码逻辑: 1.获取token并进行校验(...(parent_id=200001) # 由一查多:一象.多类名小写__set.all() sub_area = area.area_set.all() # 一旦设置了related_name='subs.../bin/bash mysql -u -p -h < sql文件; 4.2省市县三级联动API 1.获取所有省级地区的信息。

1.2K30

django 1.8 官方文档翻译:2-1-1 模型语法

对于通过中介模型与自己进行多关联的模型,允许存在到同一个模型的两个外键,但它们将被作为多多关联关系的两个(不同的)方面。...和普通的多多字段一样,你可以直接使用被关联模型的属性进行查询: # Find all the groups with a member whose name starts with 'Paul' >>...SQL 的保留字例如join、where 和select,可以用作模型的字段名,因为Django 会对底层的SQL 查询语句中的数据库表名和列名进行转义。 它根据你的数据库引擎使用不同的引用语法。...CommonInfo 模型无法像一般的Django模型一样使用,因为它是一个抽象化基础类。它无法生成数据表单或者管理器,并且不能实例化或者储存。 很多用户来说, 这种类型的模型继承就是你想要的。...因此,如果你要保证这两个 model 同步并程序进行改动,那么就会变得繁冗而脆弱。 另一个不同之处是两者 管理器的处理方式不同。

4.9K20

【Python全栈100天学习笔记】Day41 Django深入理解框架

NAME属性代表数据库的名称,如果使用SQLite它对应着一个文件,在这种情况下NAME的属性值应该是一个绝对路径;使用其他关系型数据库,则要配置对应的HOST(主机)、PORT(端口)、USER(用户名...至此我们还没有看到之前创建的模型类,需要在应用的admin.py文件模型进行注册。 注册模型类。...c6a1710303a2452e9fbd171867c5ed22.png 模型进行CRUD操作。 可以在管理员平台模型进行C(新增)、R(查看)、U(更新)、D(删除)操作,如下图所示。...我们可以通过manage.py开启Shell交互式环境,然后使用Django内置的ORM框架模型进行CRUD操作。...,所以也能通过部门反向查询该部门的员工(从一多关系“一”的一方查询“多”的一方),反向查询属性默认的名字是类名小写_set(如上面例子的emp_set),当然也可以在创建模型时通过ForeingKey

2.2K30

Django外键(ForeignKey)操作以及related_name的作用

之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先定义了两个模型,一个是老师模型,一个是学生模型,...一个老师对应多个学生,这个算是一个一多的类型(如下图所示) 那么如果我们要想查询一个老师对应的学生有哪些,该如何操作呢?...首先我们先查询到老师的信息,在这里我们使用python shell 进行演示 ,输入命令python manage.py shell 进入python shell操作界面: 第一步需要做的自然还是需要将我们的模型导入进来...,并获取老师的相关信息 返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是外键的属性,可以通过它查询到所有关于子表的信息...比如我得到了一个student对象,然后想要得到这个student对象对应的主表teache的信息的话,就使用 student.teacher 获取,其中这个teacher就是在子表定义的外键字段

2K10

几乎不写一行代码,快速开发后台功能

3.数据库模型设计 准确了解用户需求是整个系统设计的基础,也是最困难、最耗费时间的一步。在了解清楚需求后,开始进行数据库模型设计。模型设计分为逻辑模型设计和物理模型设计。...一般使用PowerDesign或者PDMan进行数据库的模型设计。 (1)生成物理模型 在PDMan可以新增模型,设计商品分类表和商品表,如下图所示。商品分类表和商品表是“一多”关系。...只要定义好模型Django就能生成一个具备增加、删除、修改和查询功能的应用。这也是Django之所以非常流行的一个很大原因。...Django自带的Admin后台管理系统可用于网站的各个模块进行管理,比如文字、图片、文件等的增加、删除、修改和查询。...访问Admin后台管理系统“http://localhost:8000/admin/”,使用刚才创建的管理员用户名和密码进行登录,登录后的界面如下图所示。

81620
领券