Django之数据库连表操作

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")

数据中只是报错路径信息

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 Game(models.Model):
    gname = models.CharField(max_length=32)

class Host(models.Model):
    hostname = models.CharField(max_length=32)
    game = models.ForeignKey(‘Game‘)

多对多情况:

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‘)

原文地址:https://www.cnblogs.com/honey-badger/p/8605850.html

时间: 2024-10-08 20:15:12

Django之数据库连表操作的相关文章

Django入门   数据库的ORM操作之一对多

Django对数据库的是通过ORM实现.什么叫做ORM呢?简单来说,我们通过sql语句查询一张表的所有数据的语句如下  select * from test.而Django中用到的表都是在models.py文件里定义.所以我们要查查询test表里的数据可以通过 test_obj = models.test.objects.all()来获取test表里所有数据的对象.再通过 test_obj.values()方法将每一行数据的里的各个字段以key和value的字典形式读取出来.这就叫ORM操作.

Django学习【第6篇】:Django之ORM单表操作(增删改查)

django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",co

数据库之表操作,数据操作

注意的几点:1.如果你在cmd中书命令的时候,输入错了就用\c跳出 2.\s查看配置信息 一.操作文件夹(库) 增:create database db1 charset utf8; 删:drop database db1; 改:alter database db1 charset gbk; 查:show databases; #查看所有的数据库 show create database db1; #查看db1数据库 二.操作文件(表) 切换到文件夹下:use db1 增:create tabl

MYSQL数据库学习----MYSQL数据库、表操作和引擎区别

MYSQL数据库的操作 一:查看MYSQL中所有的数据库 SHOW DATABASES; 二:创建数据库 CRETAE DATABASE 数据库名称; 三:删除数据库 DROP DATABASE 数据库名称; 四:查看数据库支持的存储引擎 SHOW ENGINES; 四:连接MYSQL数据库 USE 数据库名称; MYSQL数据库中表的操作 一:查看数据库中的所有表格 SHOW TABLES: 二:查看表格的结构 DESC 表名称;(基本结构): 或 SHOW CREATE TABLE 表名称;

python——Django(ORM连表操作)

一对多 class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption username = models.CharField(max_length=32) age = models.IntegerField() 增: 1.外键

数据库和表操作

一.库操作 1.创建库 create database 库名[charset utf8]; 创建库[字符集为utf8] 默认为utf8 2.查看库 show databases; 查看所有库 show create database 库名; 查看某个库的创建信息 select database(); 查看当前操作的数据库名 3.删除库 drop database 库名; 删除某个库 4.修改库 alter database 库名 charset utf8; 修改库的字符集为utf8 二.mysq

数据库多表操作

微信公众号:菜鸟永恒 第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成.例如:一个商城项目就需要分类表(category).商品表(products).订单表(orders)等多张表.且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识. 1.1 表与表之间的关系有3类表关系:一对多(多对一).多对多.一对一(了解)? 一对多关系:? 常见实例:学生和考试成绩(画图),客户和订单,分类和商品,部门和员工.? 一对多建表原则:在从表(多方)创建一个字段

Django数据库数据表操作

建立表单 django通过设置类来快速建表,打开models.py 例: from __future__ import unicode_literals from django.db import models # Create your models here. # 新建一个类叫user,其实就是新建一张叫user的表 class user(models.Model): username = models.CharField(max_length = 20) password = models

Django学习【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many). 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany(&qu