无法理解 Django 中模型的以下语句

Unable to Understand the below statements of models in Django

我对 Django 很天真,我已经完成了一个在线显示的示例电子商务应用程序。我无法理解突出显示的语句,我在网上搜索但无法理解这些语句。

有人可以像下面这样解释我吗

productitems = self.name_set.all()

这个 name_set.all() 是从哪里来的????????

orderItems = self.orderitem_set.all()

同样来自哪里 orderitem_set.all() ??????????

from django.db import models

from django.contrib.auth.models import User

# Create your models here.

class Customer(models.Model):
      user = models.OneToOneField(User,on_delete=models.CASCADE, null=True,blank=True)
      name = models.CharField(max_length=200,null=True)
      email = models.CharField(max_length=200,null=True)

      def __str__(self):
             return self.name

class Product(models.Model):
    name = models.CharField(max_length=200, null=True)
    price = models.DecimalField(max_digits=7,decimal_places=2)
    digital = models.BooleanField(default=False,null=True,blank=False)
    image = models.ImageField(null=True,blank=True)
    #image
    def __str__(self):
        return self.name

    @property
    def imageURL(self):
        try:
            url = self.image.url
        except:
            url = ''
        return url

    @property
    def get_product_total(self):
        **productitems = **self.name_set.all()****
        total = sum([item.get_total for item in productitems])
        return total
        print('total:',total)



class Order(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.SET_NULL,blank=True,null=True)
    date_ordered=models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False,null=True,blank=False)
    transaction_id = models.CharField(max_length=200, null=True)

    def __str__(self):
        return str(self.id)

    @property
    def shipping(self):
        shipping = False
        orderItems = **self.orderitem_set.all()**
        for i in orderItems:
            if i.product.digital == False:
                shipping = True
        return shipping

    @property
    def get_cart_total(self):
        orderitems = self.orderitem_set.all()
        total = sum([item.get_total for item in orderitems])
        return total

    @property
    def get_cart_items(self):
        orderitems = self.orderitem_set.all()

        total = sum([item.quantity for item in orderitems])
        return total

class OrderItem(models.Model):
    product = models.ForeignKey(Product,on_delete=models.SET_NULL,blank=True,null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
    quantity=models.IntegerField(default=0,blank=True,null=True)
    date_added=models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.product)

    @property
    def get_total(self):
        print(self.product.price)
        #  print("self.product.price:",self.product.price)
       # print("self.quantity:", self.quantity)
        total = self.product.price * self.quantity
        return total

class ShippingAddress(models.Model):
    customer = models.ForeignKey(Customer,on_delete=models.SET_NULL,blank=True,null=True)
    order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
    address = models.CharField(max_length=200,null=True)
    city = models.CharField(max_length=200, null=True)
    state = models.CharField(max_length=200, null=True)
    zipcode = models.CharField(max_length=200, null=True)
    date_added = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return str(self.address)

那些是反向外键查找。如果您没有自己定义不同的术语,{field_name}_set 模式是 Django 默认使用的模式。

Django 文档在此处对其进行了更多解释 https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.ForeignKey.related_name

这里https://docs.djangoproject.com/en/3.1/topics/db/queries/#following-relationships-backward

文档中的示例是:

>>> b = Blog.objects.get(id=1)
>>> b.entry_set.all() # Returns all Entry objects related to Blog.

在模型上定义 ForeignKey 字段时,您可以使用 related_name 参数将相关查找设置为自定义值,而不是使用默认值。我自己经常这样做,通常有比默认项目更合适的条款。