对Django中ForeignKey的简单使用详解
ForeignKey的作用
在Django的ORM中,ForeignKey是用来建立模型之间关系的一种字段类型。其作用是将一个模型与其他一个模型关联起来。
例如,在一个图书管理系统中,每一本书都是从一个出版社出版的,我们就可以在书的模型中使用ForeignKey关联出版社的模型。
ForeignKey的用法
ForeignKey的定义:
models.ForeignKey(to, on_delete, **options)
to
:关联的模型。on_delete
:定义当被关联的模型数据被删除时,ForeignKey字段如何处理。**options
:其他关键字参数。
下面是一个简单的示例:
示例1:对一个模型进行关联
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
在以上代码中,Book模型使用ForeignKey关联了Publisher模型。通过将models.ForeignKey(Publisher, on_delete=models.CASCADE)
添加到Book模型中的publisher字段,我们就可以通过一个外键实现这两个模型之间的关联。
示例2:调用被关联模型的属性
如果需要调用被关联模型的属性,可以使用.属性名
来获取。
book_list = Book.objects.all()
for book in book_list:
print(book.title, book.publisher.name)
在以上代码中,通过book.publisher.name
来获取book模型关联的publisher模型的name属性。
外键数据关联的删除操作
当使用ForeignKey关联模型时,我们需要考虑当被关联模型数据被删除时,ForeignKey字段如何处理。on_delete
参数决定了外键数据的删除行为。
models.CASCADE
:当被关联模型数据被删除时,所有引用该数据的数据也将删除。models.PROTECT
:当被关联模型数据被删除时,将抛出ProtectedError
。models.SET_NULL
:当被关联模型数据被删除时,ForeignKey字段将设为NULL。models.SET_DEFAULT
:当被关联模型数据被删除时,ForeignKey字段将设为默认值。models.DO_NOTHING
:当被关联模型数据被删除时,什么也不做。
下面是一个简单的示例:
示例3:使用on_delete参数
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
在以上代码中,我们将on_delete参数设置为models.CASCADE
,当Publisher模型的某个数据被删除时,与之关联的Book模型数据也将被删除。
总结
通过上述示例,我们可以看到在Django框架中使用ForeignKey进行模型之间的关联非常简单且便捷。通过设置相关参数和调用方法,我们可以很方便地完成对其的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对django中foreignkey的简单使用详解 - Python技术站