本文介绍: ”’人”””学习的语言”’# 建立多对多管理的使用Person,through = ‘PersonLanguage’, # 这是一个字符串,”’人学了哪门语言”’
一、1对1关系映射
关系型数据库的强大之处在于各表之间的关联关系。 Django 提供了定义三种最常见的数据库关联关系的方法:多对一,多对多,一对一
一对一关联使用 OneToOneField来定义一对一关系
就像使用其他类型的 Field 一样:在任意一边模型属性中包含它
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __str__(self):
return "%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(
Place,
on_delete=models.CASCADE,
primary_key=True,
)
# BooleanField 在数据库使用 tinyint 类型
serves_hot = models.BooleanField(default=False)
serves_clod= models.BooleanField(default=False)
def __str__(self):
return "%s the restaurant" % self.place.name
二、1对多关系映射
定义一个多对一的关联关系,使用 django.db.models.ForeignKey 类。就和其它 Field字段类型一样,只需要在你模型中添加一个值为该类的属性
ForeignKey类需要多的一方添加一个参数,即你想要关联的模型类名
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __str__(self):
return "%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(
Place,
on_delete=models.CASCADE,
primary_key=True,
)
# BooleanField 在数据库使用 tinyint 类型
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
def __str__(self):
return "%s the restaurant" % self.place.name
class Waiter(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __str__(self):
return "%s the waiter at %s" % (self.name, self.restaurant)
三、多对多关系映射
定义一个多对多的关联关系,使用 django.db.models.ManyToManyField 类。就和其他Field字段类型一样,只需要在你模型中添加一个值为该类的属性
ManyToManyField类需要任意模型边添加一个位置参数,即你想要关联的模型类名
class SchoolClass(models.Model):
name = models.CharField(max_length=20)
class Teacher(models.Model):
name = models.CharField(max_length=10)
school_class = models.ManyToManyField(SchoolClass)
四、多对多关系自定义中间表
from django.db import models
class Person(models.Model):
'''
人
'''
name = models.CharField(max_length=32)
class Language(models.Model):
'''
学习的语言
'''
name = models.CharField(max_length=32)
# 建立多对多管理的使用
person_language = models.ManyToManyField(
Person,
through = 'PersonLanguage', # 这是一个字符串,
)
class PersonLanguage(models.Model):
'''
人学了哪门语言
'''
person = models.ForeignKey(Person,on_delete=models.CASCADE)
language = models.ForeignKey(Language,on_delete=models.CASCADE)
level = models.IntegerField(default=1)
五、自关联
自关联就是外键指向自己表模型
5.1、一对多应用
省市区级联
from django.db import models
class Area(models.Model):
name = models.CharField(max_length=32)
pid = models.ForeignKey('self', on_delete=models.CASCADE)
5.2、多对多应用
- 主播与粉丝的关系
- 链接与友情链接
from django.db import models class Person(models.Model): friends = models.ManyToManyField("self")
原文地址:https://blog.csdn.net/Calor13/article/details/135904564
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_64377.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。