繁体   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