一对一关系(One-to-One Relationship):
一对一关系表示两个模型之间存在唯一的关联。例如,每个人只有一个护照,每个护照也只属于一个人。
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
class Passport(models.Model):
number = models.CharField(max_length=10)
owner = models.OneToOneField(Person, on_delete=models.CASCADE)
一对多关系(Many-to-One Relationship):
一对多关系表示一个模型的实例可以关联到多个另一模型的实例,但反过来却不行。例如,每个作者可以写多本书,但每本书只能有一个作者。
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
多对多关系(Many-to-Many Relationship):
多对多关系表示两个模型之间存在多对多的关联。例如,学生可以参与多个课程,一个课程也可以有多个学生。
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
courses = models.ManyToManyField('Course')
class Course(models.Model):
name = models.CharField(max_length=200)
反向关系:
在每个关联中,Django都会自动为你生成反向关系。例如,如果你有一个Book模型,可以通过author反向查找作者:
author = some_book.author # 获取这本书的作者
关联字段参数:
- on_delete: 指定在关联对象被删除时的行为,常见的选项包括models.CASCADE(级联删除)、models.PROTECT(保护,防止删除关联对象)、models.SET_NULL(设置为NULL)等。
- related_name: 允许你为反向关系指定名称。例如,如果一个作者有多本书,你可以使用related_name='books'来让书本通过author.books.all()访问。
- blank 和 null: 用于控制字段是否可以为空。blank=True允许表单中该字段为空,null=True允许数据库中该字段为NULL。
以上只是一些基础概念,Django还提供了更多高级的关联功能,如对称关系、自引用关系等。在定义模型时,根据实际需求选择适合的关联类型。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7194/Django