【问题标题】:What are "Forward Foreign Key" and "Reverse Foreign Key" in Django?Django 中的“正向外键”和“反向外键”是什么?
【发布时间】:2023-01-30 22:27:41
【问题描述】:

在阅读一些网站包括Django的select_related()prefetch_related()相关话题时堆栈溢出,我经常看到这样的话转发外键反向外键但我在 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)

那么,什么是转发外键反向外键在姜戈?

【问题讨论】:

    标签: python django django-models foreign-keys django-orm


    【解决方案1】:

    Forward foreignKey 是与 Category 模型相关的 Product 模型,其中每个产品都必须有一个类别。反向外键是类别模型与产品模型的关系,一个类别可以有许多产品作为反向外键。

    【讨论】:

      【解决方案2】:
      • 转发外键意味着具有父模型外键的子模型访问父模型。

      • 反向外键意味着父模型访问具有父模型外键的子模型。

      因此,在您的情况下,因为Product模型具有指向Category模型的外键,所以Category模型是父模型,而Product模型是子模型,如下所示:

      # "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)
      

      <转发外键>

      具有父模型Category的外键的子模型Product使用obj.category访问父模型Category,如下所示:

      for obj in Product.objects.all():
          print(obj.category)
      

      <反向外键>

      父模型Category访问子模型Product,它具有父模型Categoryobj.product_set.all()的外键,如下所示:

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

      【讨论】:

        猜你喜欢
        • 2019-12-01
        • 2013-02-24
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多