Code前端首页关于Code前端联系我们

python_django数据连接一对多、多对多模型,创建自关联

terry 2年前 (2023-09-24) 阅读数 52 #后端开发

一对多模型

员工、部门等一对多关系。一个部门有多名员工。那么如何在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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门