我对 Django 没有太多经验(我使用的是 1.3),所以我觉得这是一个愚蠢的问题......但无论如何:
我有这样的模型:
class User(models.Model):
name = models.CharField()
class Product(models.Model):
name = models.CharField()
public = models.BooleanField()
class Order(models.Model):
user = models.ForeignKey(User)
product = models.ManyToManyField(Product, through='OrderProduct')
class OrderProduct(models.Model):
product = models.ForeignKey(Product)
order = models.ForeignKey(Order)
expiration = models.DateField()
假设我做了一些这样的查询
Product.objects.filter(order__status='completed', order__user____id=2)
所以我会得到所有User2
购买的产品(假设它只是Product1
)。凉爽的。但是现在我想要那个产品的过期时间,但是如果我打电话Product1.orderproduct_set.all()
,我会得到OrderProduct
with的每一个条目Product1
,但我只想要从我的查询集中返回的那个。我知道我可以在 OrderProducts 上运行一个不同的查询,但这将是对数据库的另一个打击,只是为了带回我之前运行的查询已经可以获取的数据。.query
它给了我:
SELECT "shop_product"."id", "shop_product"."name"
FROM "shop_product"
INNER JOIN "shop_orderproducts" ON ("shop_product"."id" = "shop_orderproducts"."product_id")
INNER JOIN "shop_order" ON ("shop_orderproducts"."order_id" = "shop_order"."id")
WHERE ("shop_order"."user_id" = 2 AND "shop_order"."status" = completed )
ORDER BY "shop_product"."ordering" ASC
如果我可以SELECT *
代替特定字段,我将在一个查询中获得我需要的所有数据。无论如何构建该查询并仅获取与其相关的数据?
编辑 我觉得我需要澄清一些观点,很抱歉我没有更清楚:
我不是在查询,
OrderProduct
因为有些产品是公开的,不必购买,但我仍然必须列出它们,并且查询不会返回它们OrderProduct
我期望的结果是一个产品列表,以及他们的订单数据(如果他们有的话)。在 JSON 中,它看起来有点像这样
[{id: 1, order: 1, expiration: 2013-03-03, public: false}, {id: 1, order: , expiration: , public: true
谢谢