[英]What are "Forward Foreign Key" and "Reverse Foreign Key" in Django?
在Stack Overflow等一些网站上阅读 Django 的select_related()和prefetch_related()相关主题时,经常看到Forward Foreign Key和Reverse Foreign Key这两个词,但在 Django 文档上找不到定义:
# "models.py"
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=20)
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
price = models.DecimalField(decimal_places=2, max_digits=5)
那么,Django中的正向外键和反向外键是什么?
Forward foreignKey 是与类别 model 相关的产品模型,其中每个产品都必须有一个类别。 反向外键是类别 model 与产品 model 的关系,一个类别可以有许多产品作为反向外键。
Forward Foreign Key是指拥有父 model 外键的子 model 访问父 model。
反向外键意味着父 model 访问具有父 model 外键的子 model。
因此,在您的情况下,因为Product
model 具有Category
model 的外键,所以Category
model 是父级 model, Product
model 是子级 model,如下所示:
# "models.py"
from django.db import models
class Category(models.Model): # Parent model
name = models.CharField(max_length=20)
class Product(models.Model): # Child model
category = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
price = models.DecimalField(decimal_places=2, max_digits=5)
子 model Product
访问父 model Category
with obj.category
如下图:
for obj in Product.objects.all():
print(obj.category) # Here
parent model Category
访问 child model Product
和obj.product_set.all()
如下图:
for obj in Category.objects.all():
print(obj.product_set.all()) # Here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.