我需要通过我的外键反向航行。由于某种原因,它不起作用...
models.by:
class Investment(models.Model):
feeder = models.ForeignKey(Fund, on_delete=models.CASCADE)
investor = models.ForeignKey(Investor, on_delete=models.CASCADE)
(...)
class Fund(models.Model):
slug = models.CharField(max_length=100, default = 'default')
(...)
class Investor(models.Model):
account = models.CharField(max_length = 10, unique=True)
first_name = models.CharField(max_length = 100)
(...) views.py:
Investment.objects.filter(investor__pk=pk)
->我需要了解投资者每笔投资的Fiund的子弹属性。.我已经过滤了投资者(没关系)。接下来是is。我以为我需要使用fund.set_all(),但是它不起作用。有人可以救援吗?
谢谢!!!
答案 0 :(得分:0)
我认为您对此工作方式有些困惑。要从投资者->基金开始工作,您必须通过投资者->投资->基金。您可以这样操作:
首先,使用related_name
:
class Investment(models.Model):
feeder = models.ForeignKey(Fund, on_delete=models.CASCADE, related_name="investmentAsFeeder")
investor = models.ForeignKey(Investor, on_delete=models.CASCADE, related_name="investmentAsInvestor")
然后,您可以像这样使用它:
investor = Investor.objects.get(id=1)
investors_investments = investor.investmentAsInvestor.all()
investor_investment_funds = Fund.objects.filter(investmentAsFeeder__in=investor_investments)
答案 1 :(得分:0)
如果仅需要值,则可以通过一个查询获取它:
my_investor = Investor.objects.get(pk=pk)
my_investor.invesment_set.values('id', 'feeder__slug`)
或者,如果您不需要投资者实例本身,则可以进行另一个查询:
Investment.objects.filter(investor__pk=pk).values('id', 'feeder__slug')