在Django 4.0中,模型关联是一种强大的方式,允许你在不同的模型之间建立关系,例如一对一、一对多和多对多关系。以下是一些模型关联的基本概念和用法:

一对一关系(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