[英]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.