📅  最后修改于: 2023-12-03 15:34:14.811000             🧑  作者: Mango
Django 是 Python 的一个 Web 框架,它的模型系统提供了多个关系字段用于建立模型之间的关联关系。本文将深入介绍 Django 中的关系字段。
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=30)
class Contact(models.Model):
person = models.OneToOneField(Person, on_delete=models.CASCADE)
email = models.EmailField()
上面的代码中,Contact
模型与 Person
模型是一对一关系。OneToOneField
表示该字段建立了一个唯一的一对一关系,on_delete=models.CASCADE
表示在对应的 Person
实例被删除时,与之相关的 Contact
实例也会被删除。
from django.db import models
class Manufacturer(models.Model):
name = models.CharField(max_length=255)
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
上面的代码中,Car
模型与 Manufacturer
模型是一对多关系。ForeignKey
表示该字段建立了一个外键关联,on_delete=models.CASCADE
同样表示在对应的 Manufacturer
实例被删除时,与之相关的 Car
实例也会被删除。
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=255)
class Product(models.Model):
name = models.CharField(max_length=255)
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
products = models.ManyToManyField(Product)
上面的代码中,Order
模型与 Customer
模型、Product
模型是多对多关系。ManyToManyField
表示该字段建立了一个多对多关系,products
表示在 Order
模型中与 Product
模型相关的字段。
在上面的例子中,我们只定义了一方的关系字段。Django 会自动地在相关的模型上创建反向关系。例如,在 Car
模型中,我们定义了 manufacturer
字段,但是 Manufacturer
模型中并没有定义任何字段,但是我们依然可以通过 car.manufacturer
访问到对应的 Manufacturer
实例。反向关系可以通过 related_name
参数自定义名称。
from django.db import models
class Manufacturer(models.Model):
name = models.CharField(max_length=255)
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE, related_name="cars")
name = models.CharField(max_length=255)
在上面的代码中,我们将 related_name
参数设置为 cars
,这样在 Manufacturer
模型中就可以通过 manufacturer.cars.all()
访问到与之相关的所有 Car
实例。
以上就是 Django 中常用的关系字段。这些关系字段使得模型建立关联关系变得简单易懂,也使得访问关联数据变得方便。在实际的应用中,我们可以根据实际情况选择合适的关系字段来建立模型之间的关联关系。