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
模型以获得相关的 Product
s(或 Order
s 对于给定的 Product
)。然后您可以通过以下方式更方便地访问这些内容:
<i>myorder</i><b>.products</b>.all()
其中 myorder
是一个 Order
对象。
一些备注:
- 不清楚您为什么使用
null=True
。这将导致 OrderProduct
不再指向 Order
或 Product
;
- 模型通常用 PerlCase 编写,而不是 snake_case,所以
OrderProduct
,而不是 order_product
;
- 通常情况下,
ForeignKey
的名称中没有 _id
后缀,因为 Django 会自动为字段添加 _id
后缀以生成数据库字段;
- 以后可以在
OrderProduct
模型中添加一个quantity
字段来指定单次订购商品的次数Order
,这样可以使数据更加紧凑。
我有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
模型以获得相关的 Product
s(或 Order
s 对于给定的 Product
)。然后您可以通过以下方式更方便地访问这些内容:
<i>myorder</i><b>.products</b>.all()
其中 myorder
是一个 Order
对象。
一些备注:
- 不清楚您为什么使用
null=True
。这将导致OrderProduct
不再指向Order
或Product
; - 模型通常用 PerlCase 编写,而不是 snake_case,所以
OrderProduct
,而不是order_product
; - 通常情况下,
ForeignKey
的名称中没有_id
后缀,因为 Django 会自动为字段添加_id
后缀以生成数据库字段; - 以后可以在
OrderProduct
模型中添加一个quantity
字段来指定单次订购商品的次数Order
,这样可以使数据更加紧凑。