【问题标题】:Django - ForeignKey "Reverse" ("_set")Django - ForeignKey“反向”(“_set”)
【发布时间】:2019-04-10 20:36:36
【问题描述】:

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

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)

(...) 视图.py:

Investment.objects.filter(investor__pk=pk)

--> 我需要得到一个投资者的每个投资的 Fiund 属性。我已经过滤了投资者(没关系)。接下来是巡航到蛞蝓。我认为我需要使用 fund.set_all() 但它不起作用.. 有人来救援吗?

谢谢!!!

【问题讨论】:

    标签: python django foreign-keys


    【解决方案1】:

    我认为您对它的工作原理有些困惑。要从投资者 -> 基金开始工作,您必须经过投资者 -> 投资 -> 基金。你可以这样做:

    首先,使用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)
    

    【讨论】:

      【解决方案2】:

      如果您只需要值,您可以通过一个查询获得它:

      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')
      

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2023-03-16
        • 1970-01-01
        • 2010-12-29
        • 2023-03-08
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多