我的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_related
和fetch_related
,是性能优化 (JOIN)。 select_related
用于一对一 X 方案,prefetch_related
多对 X 方案。