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

问题描述

我有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对象。

一些评论:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...