django ForeignKey relation 如何获取其他表的数据

django ForeignKey relation how to get data other tables

我有3个模型

class product(models.Model):
  name = models.CharField(max_length=30)

class order(models.Model):
  order_number = models.CharField(max_length=30)

class order_products(models.Model):
  order_id = models.ForeignKey(order )
  product_id = models.ForeignKey(product )

一个订单有多个产品

这个关系是正确的吗?如果是正确的,那么如果我得到了所有的订单,那么我怎样才能得到它的相关产品数据?

这是一个many-to-many关系。您也可以在没有带有 ManyToManyField 的中间模型的情况下指定它,或者在此模型之上指定一个:

class Product(models.Model):
    name = models.CharField(max_length=30)

class Order(models.Model):
    order_number = models.CharField(max_length=30)
    <b>products</b> = models.<b>ManyToManyField(</b>
        Product,
        through='OrderProduct',
        related_name='orders'
    <b>)</b>

class OrderProduct(models.Model):
  order = models.ForeignKey(Order, on_delete=models.CASCADE)
  product = models.ForeignKey(Product, on_delete=models.CASCADE)

这里 ManyToManyField 将参考 OrderProduct 模型以获得相关的 Products(或 Orders 对于给定的 Product)。然后您可以通过以下方式更方便地访问这些内容:

<i>myorder</i><b>.products</b>.all()

其中 myorder 是一个 Order 对象。

一些备注:

  1. 不清楚您为什么使用 null=True。这将导致 OrderProduct 不再指向 OrderProduct;
  2. 模型通常用 PerlCase 编写,而不是 snake_case,所以 OrderProduct,而不是 order_product;
  3. 通常情况下,ForeignKey 的名称中没有 _id 后缀,因为 Django 会自动为字段添加 _id 后缀以生成数据库字段;
  4. 以后可以在OrderProduct模型中添加一个quantity字段来指定单次订购商品的次数Order,这样可以使数据更加紧凑。