Django-ForeignKey“ Reverse”(“ _set”)

时间:2019-04-10 20:36:36

标签: python django foreign-keys

我需要通过我的外键反向航行。由于某种原因,它不起作用...

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(),但是它不起作用。有人可以救援吗?

谢谢!!!

2 个答案:

答案 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')
相关问题