使用 Django ORM 执行关系查询



我的django应用程序中有这个模型:

class Buyer(model.Model):
    username = ...
    ...
class Seller(model.Model):
    username = ...
    ...
class Stuff(model.Model):
    seller = models.ForeignKey(Seller)
    ....
class BuyerStuff(models.Model):
    buyer = models.ForeignKey(Buyer)
    stuff = models.ForeignKey(Stuff)
    ...

我想获得与特定卖家有关的所有东西,例如订购该东西。我可以用原始sql做到这一点,但我想知道有没有办法用django ORM做到这一点?

你在寻找反向关系船吗?

https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

另请查看"related_name"模型属性...非常适合在反向查找中使用。

默认情况下,

FK 反向被命名为 {model}_set

所以在你的情况下:

john = Buyer.objects.get(pk=5)
john_stuff = john.buyerstuff_set.all()

但是使用related_name s更容易记住。

如果您的模型如下所示:

class BuyerStuff(models.Model):
    buyer = models.ForeignKey(Buyer)
    stuff = models.ForeignKey(Stuff, related_name='stuff')
    ...

john_stuff = john.stuff.all()

但是,如果要查询 FK:

buyer = BuyerStuff.objects.filter(buyer__pk=5)

最后select_relatedfetch_related ,是性能优化 (JOIN)。 select_related用于一对一 X 方案,prefetch_related多对 X 方案。

最新更新