博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之数据库连表操作
阅读量:5120 次
发布时间:2019-06-13

本文共 2236 字,大约阅读时间需要 7 分钟。

1、表结构修改

如果原来表中已存在的数据,表结构修改后就会出现结构混乱,makemigrations更新表的时候就会出错,解决方法:

1、新增加的字段,设置允许为空。生成表的时候,之前数据新增加的字段就会为空。(null=True允许数据库中为空,blank=True允许admin后台中为空)

2、新增加的字段,设置一个默认值。生成表的时候,之前的数据新增加字段就会应用这个默认值

图片、IP字段

ip = models.GenericIPAddressField(protocol="ipv4",null=True,blank=True)img = models.ImageField(null=True,blank=True,upload_to="upload")

settings文件配置url映射

数据中只是报错路径信息

2、常用参数 

选择下拉框  choices

class UserInfo(models.Model):    USER_TYPE_LIST = ((1,'user'),(2,'admin'),)    user_type = models.IntegerField(choices=USER_TYPE_LIST,default=1)

 

3、连表结构

  • 一对多:models.ForeignKey(其他表)
  • 多对多:models.ManyToManyField(其他表)
  • 一对一:models.OneToOneField(其他表)
应用场景:一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。多对多:在某表中创建一行数据是,有一个可以多选的下拉框例如:创建用户信息,需要为用户指定多个爱好一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据

 一对多情况:

class Groupname(models.Model):    caption = models.CharField(max_length=30)  #不同的职务字段class User(models.Model):    username = models.CharField(max_length=30)    password = models.CharField(null=False,max_length=30)    email = models.EmailField(null=False)    groupname = models.ForeignKey(Groupname)  #外键

User表会自动添加groupname_id 的一个字段

 多对多情况:

class UserGroup(models.Model):    group_name = models.CharField(max_length=16) class User(models.Model):    name = models.CharField(max_length=16)    sex = models.CharField(max_length=16)    email = models.EmailField(max_length=32)    usergroup_user = models.ManyToManyField('UserGroup')

 Django model会自动创建第3张关系表,用于对应user id 和usergroup id

一对一情况:

class User2(models.Model):    name = models.CharField(max_length=16)    sex = models.CharField(max_length=16)    email = models.EmailField(max_length=32) class Admin(models.Model):    username = models.CharField(max_length=32)    password = models.CharField(max_length=32)    admin_user2 = models.OneToOneField('User2')

 

获取GET参数数据,GET方式查询:

class Group2(models.Model):    caption = models.CharField(max_length=32) class User2(models.Model):    username = models.CharField(max_length=32)    group2 = models.ForeignKey('Group2')

一对多跨表操作,总结
1、group2对应的是一个对象
2、创建数据 group2_id ,直接查询数据库
3、获取数据,通过.     group2.caption
4、查询数据,通过__   group2__caption

 

 

转载于:https://www.cnblogs.com/honey-badger/p/8605850.html

你可能感兴趣的文章
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
大话文本检测经典模型:EAST
查看>>
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>