【发布时间】:2023-02-24 09:51:16
【问题描述】:
我想得到所有相关模型的数据,但我只得到了一些相关数据。为了避免 N+1 问题,我使用了 select_related() 和 prefetch_related() 方法。
起初,我有这些模型:
class OrderList(models.Model):
order_id=models.CharField(max_length=100)
order_status=models.CharField(max_length=100)
class ProductInOrder(models.Model):
order_key=models.ForeignKey(OrderList, on_delete=models.CASCADE, related_name="order_key")
product_id=models.CharField(max_length=100)
product_price=models.CharField(max_length=100)
class MemosInProduct(models.Model):
product_key=models.ForeignKey(ProductInOrder, on_delete=models.CASCADE, related_name="product_key")
memo=models.CharField(max_length=100)
blahblah some codes...
这个模型的简短解释,一个 OrderList 有很多 ProductInOrder(一对多) 一个 ProductInOrder 有很多 MemosInProduct(一对多)
然后,我在 django shell 中运行这段代码:
order_list=OrderList.object.select_related("order_key", "product_key").all()
我接受了所有有序列表数据以及与之相关的所有数据(产品、备忘录):除外
order_list[0].order_key[0].product_key[0].memo order_list[0].order_key[0].product_key[1].memo order_list[0].order_key[1].product_key[0].memo ...
但我得到了:输出
select_related 中给出的字段名称无效:“order_key”、“product_key”。选项是:(无)
我也试过这个:
order_list=MemosInProduct.object.select_related("order_key", "product_key").all()但输出不匹配我除外。
【问题讨论】:
标签: python django django-models orm