目录
- 一对一
- 创建实例
- choice类型如何获取具体值
- 如何获取一对一另一个表里面的数据
- 一对多
- 实体类
- 一对多代码(自己创建第三个表)
- 一对多代码(Django给你生成第三个表)
- 如何操作第三个表
- 增加
- 移除
- 编辑(覆盖)
- 查询
- 清空
一对一
创建实例
代码语言:javascript复制class UserProfile(models.Model):
user_info = models.OneToOneField('UserInfo',on_delete=models.CASCADE)
username = models.CharField(max_length=64)
password = models.CharField(max_length=64)
class UserInfo(models.Model):
user_type_choice = (
(0, u'普通用户'),
(1, u'高级用户'),
)
user_type = models.IntegerField(choices=user_type_choice)
name = models.CharField(max_length=32)
email = models.CharField(max_length=32)
address = models.CharField(max_length=128)
先创建UserInfo表,再创建UserProfile表,这个UserProfile表里面有一个字段user_info ,是一对一的字段,也就是这个UserProfile表里面的user_info的字段,所有数据的都不一样,不可能一样,因为是OneToOneField,一对一
choice类型如何获取具体值
字段是choice类型,如何获取到的是对应的值,而不是键
这个表里面的这个字段,数据库保存的是键1或者2
我想查询出来的这个字段是具体的值,如何写
也就是使用下划线,
代码语言:javascript复制 get_字段名_display()
这样就可以获取具体的值
如何获取一对一另一个表里面的数据
UserInfo是一个表,UserProfile是一个表,并且UserProfile表里面有一个字段是一对一的外键,关联是UserInfo表,那么现在想要使用UserInfo表里面的数据的对象,获取到UserProfile表里面的数据,如何获取
一对多
实体类
代码语言:javascript复制男孩表
class Boy(models.Model):
name = models.CharField(max_length=100)
女孩表
class Girl(models.Model):
name = models.CharField(max_length=100)
相亲表
class xaingqing(models.Model):
nan = models.ForeignKey('Boy',on_delete=models.CASCADE)
nv = models.ForeignKey('Girl',on_delete=models.CASCADE)
一对多代码(自己创建第三个表)
有个相亲表都是外键,现在想要获取到和一个男孩相亲的女生有多少个,也就是男生是一个,女生是多个,典型的一对多的关系
代码语言:javascript复制 # 查询到某一个男生
obj = Boy.objects.filter(name="小明").first()
# 因为相亲表里面有个 字段关联的男生表,所以可以根据男生对象_set,
获取到相亲表对象
relist = obj.xaingqing_set.all()
print(relist)
# <QuerySet [<xaingqing: xaingqing
object (1)>, <xaingqing: xaingqing object (2)>]>
# SELECT
# `myfirst_xaingqing`.`id`,
# `myfirst_xaingqing`.`nan_id`,
# `myfirst_xaingqing`.`nv_id`
# FROM `myfirst_xaingqing`
# WHERE `myfirst_xaingqing`.`nan_id` = 1
print(relist.query)
for item in relist:
# item 代表相亲表里面的每一行数据对象
print(item.nv.name)
1、搜索条件使用 __ 连接 2、获取值时使用 . 连接
一对多代码(Django给你生成第三个表)
我们有了男孩表,女孩表,之前我们写一个相亲表,让男孩表和女孩表进行关联。现在我们不写第三个表了,但是还想让两个表进行关联,我们可以这样写。(Django给你生成的只有3列)
实体类
代码语言:javascript复制class Boy(models.Model):
name = models.CharField(max_length=100)
nvxx = models.ManyToManyField('Girl')
class Girl(models.Model):
name = models.CharField(max_length=100)
现在model里面只有两个类,但是在数据库里面却有3个表,另一个关联表是Django给你生成的,就是通过ManyToManyField() 这个
如何操作第三个表
这个Django给生成的第三个表,在model文件里面是没有的,那么我们要如何操作这个表,也就是实现对这个表的增删改查