问题描述
我有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 )
一个订单有多个产品
此关系是否正确?如果正确,那么如果我收到所有订单,那么如何获取与产品相关的数据?
解决方法
这是一个多对多关系。您也可以在不使用带有ManyToManyField
的中间模型的情况下进行指定,或者在该模型之上指定一个:
class Product(models.Model):
name = models.CharField(max_length=30)
class Order(models.Model):
order_number = models.CharField(max_length=30)
products = models.ManyToManyField(
Product,through='OrderProduct',related_name='orders'
)
class OrderProduct(models.Model):
order = models.ForeignKey(Order,on_delete=models.CASCADE)
product = models.ForeignKey(Product,on_delete=models.CASCADE)
此处,ManyToManyField
将参考OrderProduct
模型以获得相关的Product
(或给定Order
的{{1}})。然后,您可以使用以下命令更方便地访问这些文件:
Product
myorder.products.all()
是myorder
对象。
一些评论:
- 不清楚您为什么使用
Order
。这将导致null=True
不再指向OrderProduct
或Order
; - 模型通常以 PerlCase 而不是 snake_case 编写,因此
Product
而不是OrderProduct
; - 通常,
order_product
的后缀中没有ForeignKey
后缀,因为Django会自动将_id
后缀添加到field以生成数据库字段; - 您以后可以在
_id
模型中添加quantity
字段,以指定在单个OrderProduct
中订购产品的次数,这使数据更紧凑。 li>