python ORM关联表
2021-03-06 05:30
标签:creat code 访问 查找 object key 命名 length 代码 python ORM关联表 定义两张表 然后,执行使定义生效到数据库中。 然后,命令行中执行 先输入如下代码,创建一些数据 根据对象访问外键表 通过 表Model名转化为小写 ,后面加上一个 _set 来获取所有的反向外键关联对象 在定义Model的时候,外键字段使用 就可以使用更直观的属性名,像这样 但是,我们发现,这种方式,会有重复的记录产生,如下 可以使用 python ORM关联表 标签:creat code 访问 查找 object key 命名 length 代码 原文地址:https://www.cnblogs.com/cupid10/p/14307762.html# 国家表
class Country(models.Model):
name = models.CharField(max_length=100)
# 学生表, country 字段是国家表的外键,形成一对多的关系
class Student(models.Model):
name = models.CharField(max_length=100)
grade = models.PositiveSmallIntegerField()
country = models.ForeignKey(Country, on_delete=models.PROTECT)
python manage.py makemigrations common
python manage.py migrate
python manage.py shell
,直接启动Django命令行,输入代码。from common.models import *
c1 = Country.objects.create(name=‘中国‘)
c2 = Country.objects.create(name=‘美国‘)
c3 = Country.objects.create(name=‘法国‘)
Student.objects.create(name=‘张三‘, grade=1, country=c1)
Student.objects.create(name=‘李四‘, grade=2, country=c1)
Student.objects.create(name=‘王五‘, grade=1, country=c1)
Student.objects.create(name=‘赵六‘, grade=2, country=c1)
Student.objects.create(name=‘Mike‘, grade=1, country=c2)
Student.objects.create(name=‘Gus‘, grade=1, country=c2)
Student.objects.create(name=‘White‘, grade=2, country=c2)
Student.objects.create(name=‘Napolen‘, grade=2, country=c3)
由学生查国家
访问所有一年级的学生
Student.objects.filter(grade=1).values()
获取一年级所有的学生姓名
Student.objects.filter(grade=1).values(‘name‘)
访问某一个学生所在的国家
s1.Student.objects.get(name=‘张三‘)
s1.country.name
查找一年级的中国学生(注意:country__name两个横线)
Student.objects.filter(grade=1,country__name=‘中国‘).values()
如果需要学生姓名和国家2个字段
Student.objects.filter(grade=1,country__name=‘中国‘) .values(‘name‘,‘country__name‘)
输出为:
由国家查学生,反向访问
获取所有中国的学生
cn = Country.objects.get(name=‘中国‘)
cn.student_set.all()
related_name
参数,像这样# 国家表
class Country(models.Model):
name = models.CharField(max_length=100)
# country 字段是国家表的外键,形成一对多的关系
class Student(models.Model):
name = models.CharField(max_length=100)
grade = models.PositiveSmallIntegerField()
country = models.ForeignKey(Country,
on_delete = models.PROTECT,
# 指定反向访问的名字
related_name=‘students‘)
cn = Country.objects.get(name=‘中国‘)
cn.students.all()
反向过滤
Country.objects.filter(students__grade=1).values()
或者
Country.objects.filter(student__grade=1).values()
.distinct()
去重Country.objects.filter(students__grade=1).values().distinct()