django 1.11 向 django2 django3 过渡的 注意点
1 django 1.11.11 的路径 为 url开头,集合了字符串匹配及 正则匹配
2 django 1.11.11 需要使用pymysql ,需要在 项目的 __init__.py 文件中进行 初始化配置
3 django 3.2 路由使用 path 开头
4 django 3.2 使用 mysqlclicent 组件,不需要明显配置,在 settings.py 中配置完 数据库 即可.
5 django 的外键,ForeignKey 的定义,及使用.
5.1 简单模式:
直接在 django 的model.py 中定义模型类,然后使用makegritation \migrate 来生成 数据表,和数据表之间的 依赖关系.简单省事. 少有不足就是 数据库的字段,与设计稿的实际情况中,关联字段少有不同. 使用id作为主键时,会在管理字段中 添加 XXX_id 作为数据库字段.
5.2 自定义模式:
自定义模式,可以通过 先通过mysql 来实现 数据库及数据表的创建,然后 再定义django models.py 中的 数据模型,完成映射.
这里最主要的区别还是 外键, Foreign Key 的定义完成后,及与数据库表的指定关系的 确定.
这个指定对应关系,如下例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Note(models.Model): # 关联外键 # 关联的外键,直接使用user的phone来关联 # 这个user的关联的重点方式,不知道正确与否 # 这里 系统将默认使用user_id 作为 字段的名称去 note表中查找, # 这里该怎么 指定django 使用user列,而不是user_id 列 # Django 在字段名后附加 "_id" 来创建数据库列名。在上面的例子中,Car 模型的数据库表将有一个 manufacturer_id 列。 #(你可以通过指定 db_column 来显式地改变这一点)然而,你的代码应该永远不需要处理数据库列名,除非你编写自定义 SQL。你将总是处理你的模型对象的字段名。 # 通过在 该字段中 定义db_column 来指定 user = models.ForeignKey(User,on_delete = models.CASCADE,to_field = "phone" ,db_column = "user" ) content = models.CharField(max_length = 255 ) annotation = models.CharField(max_length = 255 ) playcount = models.IntegerField(default = 0 ) sharecount = models.IntegerField(default = 0 ) status = models.IntegerField(default = 0 ) createdate = models.DateTimeField(auto_now_add = True ) class Meta: db_table = "note" |
5.2.1指定 关联关系的列使用: models.ForeignKey(XXXXX,XXXXX,to_field="XXXXX"),来指定关联关系列
5.2.2使用 Field.db_column="XXXX" 该表所对应的数据列.
5.3 one_to_one\one_to_more\more_to_more 中关键点是:
5.3.1 上面的 字段 关系指定
5.3.2 赋值,one_to_one\one_to_more 赋值简单,more_to_more 需要借助管理器的方法来完成,其实就是 通过管理器来实现对第三张关系表的 增删改查的操作.管理器只是进行了 封装,因为,在django 模型的迁移层面上,第三张关系表,django 并没有直接对 开发者开放,而是代办了,所以增删改查的操作也就进行了 封装--->抽象.
5.3.3 查询
5.3.3.1 one_to_one进行直接 使用属性方式进行查询
5.3.3.2 one_to_more\more_to_more 需要使用[filed]_set 来进行反向的 "多"的那侧查询,因为这是个集合.查询出来后也是个 列表.
6\自定义的多对多表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | ''' 在多对多(many-to-many)关系中添加添加额外的属性字段¶ 如果你只是想要一个类似于记录披萨和配料之间混合和搭配的多对多关系,标准的 ManyToManyField 就足够你用了。但是,有时你可能需要将数据与两个模型之间的关系相关联。 举例来讲,考虑一个需要跟踪音乐人属于哪个音乐组的应用程序。在人和他们所在的组之间有一个多对多关系,你可以使用 ManyToManyField 来代表这个关系。然而,你想要记录更多的信息在这样的关联关系当中,比如你想要记录某人是何时加入一个组的。 对于这些情况,Django 允许你指定用于控制多对多关系的模型。你可以在中间模型当中添加额外的字段。在实例化 ManyToManyField 的时候使用 through 参数指定多对多关系使用哪个中间模型。对于我们举的音乐家的例子,代码如下: ''' class Person(models.Model): name = models.CharField(max_length = 128 ) def __str__( self ): return self .name # 这里是关键,在Group 表中定义的外键 # 在 many to many 字段中,显示的使用 through字段 指定使用 关系表 through="Membership",显示的指定所需要的表 class Group(models.Model): name = models.CharField(max_length = 128 ) members = models.ManyToManyField(Person, through = 'Membership' ) def __str__( self ): return self .name ''' 你需要在设置中间模型的时候, 显式地为多对多关系中涉及的中间模型指定外键。 这种显式声明定义了这两个模型之间是如何关联的。 ''' class Membership(models.Model): person = models.ForeignKey(Person, on_delete = models.CASCADE) group = models.ForeignKey(Group, on_delete = models.CASCADE) date_joined = models.DateField() invite_reason = models.CharField(max_length = 64 ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!