簡體   English   中英

Django中的“正向外鍵”和“反向外鍵”是什么?

[英]What are "Forward Foreign Key" and "Reverse Foreign Key" in Django?

Stack Overflow等一些網站上閱讀 Django 的select_related()prefetch_related()相關主題時,經常看到Forward Foreign KeyReverse 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 Productobj.product_set.all()如下圖:

for obj in Category.objects.all():
    print(obj.product_set.all()) # Here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM