python_django数据连接一对多、多对多模型,创建自关联
一对多模型
员工、部门等一对多关系。一个部门有多名员工。那么如何在django中创建这种类型的表关系呢?
实际上使用外键。 在多字段页面中,输入外键。比如员工和部门,员工很多,直接把部门放到员工表里就可以了。
示例(参见第 19 行):
class Class(models.Model):
name = models.CharField(max_length=20)
create=Terated♶d. is_delete = models.BooleanField(default=False)
class Meta:
db_table = "部门"
class Employed(models.Model):=Cleeld.2 age = models.IntegerField ()
gender = models.IntegerField(default=0)
#decimal_place = 2 表示两位小数,max_digits 表示 8 位,包括带的两位小数。 (max_digits=8,decimal_places=2)
# null=True 表示可以为空,blank=True 表示django后台管理的输入字段可以为空
comment = models.CharField(max_length=300, null True,Empty = True)
hire_data = Models.datefield(Auto_now_add = TRUE)
Department = Models.Foreignkey(“部门”)
=“”1。设置外键时,必须使用on_delete选项来指示当从主表中删除数据时应如何处理外键引用的表数据。可选常量包含在 django.db.models 中:
Association on_delete 属性的值
- models.CASCADE 这是默认值,级联删除删除相关数据
- department =Key.Foreign(Foreign ) '部门' , on_delete=models.CASCADE)
- models.PROTECT 只要相关数据存在,就无法删除
- department = models.ForeignKey('Department', on_delete=models.PROTECT)
- _NULL设置。删除数据后相关字段为NULL,仅在启用字段空值(null=True)时才可用
2。如果关联的字段不在应用程序文件夹的model.py文件中,则应写为
department = models.ForeignKey( "(应用程序文件夹名称).Department")
还有一件事是需要特别注意的是: department = models.ForeignKey("Department", related_name='employee'),按部门查找员工时使用employee 如果不设置,则使用默认的employee_set(类名小写+_set)
一对多查询:
员工所属类(可查到对象):
a = Employee. objects.get(id=1)
b = a.department
部门所有员工(找到的对象为对象):
a = Department.objects.get(id=1)
b = a.employee_set.all()
多对多模型
多对多关系,例如学生和俱乐部。一个学生可以加入多个俱乐部,一个俱乐部可以有多名学生。那么如何在django中创建这种类型的表关系呢?
Django 有两种方法来创建多对多关系。 † ) :
name = models.CharField(max_length=16)
members = models.ManyToManyField("Student")
只需在两侧添加像第 6 行那样的 ManyToManyField 即可。Django自动为多对多关系创建一个表来连接两个表。
有询问吗?
1。俱乐部的所有成员(找到的对象是对象)
c = Club.objects.get(id=1)
c.members.all()
2.会员的所有俱乐部(找到的对象都是对象)
s = Student.objects.filter(id=1)
s.club_set.all() # 类名小写 + _set
2.方法:(比较灵活)
可以自己手动创建表关联。
class Student(models.Model):
name= models.CharField(max_length=16)
birthday=models.DateField()=s。 models.CharField(max_length=16)
class Membership(models.Model):
student = models.ForeignKey("Student")
club = models.然后这个♷")")这样创建的表如何查询呢?
学生加入的所有俱乐部:
a = Student.objects.get(id=1)
b = a.membership_set.all() # i 中找到的对象是 b- in :
print(i.club.name)
俱乐部的所有成员:
a = Club.objects.get(id=1)
b = a.membership_set.all() # Check 输出 b 中 i 的对象
:
print(i.student.name)
自关联模型
自关联模型是表中与以下项关联的列:表中的另一列一行。 最典型的自相关模型是区域表。省、市、县可以在表中找到。域 pid 为零,城市 pid 是域标识符,县 pid 是城市标识符。
示例:
class Field(models.Model):
name = models.CharField(max_length=20, verbose_name='name')-special company-many : 生成的字段名称parent_id
parent = models.ForeignKey('self', verbose_name='上行政部门')
class Meta:
db_table = 'tb_ministrativeaversion'
那么,如何查看呢?
如果你知道一个城市的城市,我想知道它属于哪个省。
a = Area.objects.get(id=1)
# b是城市所在省份的对象
b = a.parent
如果你知道一个省叫我想要的省份看看有哪一个城市?
a = Area.object.get(id=1)
# b是a区域内所有城市的对象
b = a.area_set.all() #类名小写 + '_set '
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。