【问题标题】:Django ForeignKeyDjango外键
【发布时间】:2019-08-01 01:51:40
【问题描述】:

我正在努力通过外壳进行反向搜索以查找外键

models.py:

class Investor(models.Model):
 first_name = models.CharField(max_length = 100)
 last_name = models.CharField(max_length = 100)

 def __str__ (self):
    return '%s %s' % (self.first_name, self.last_name)

class Investment(models.Model):
 investor = models.ForeignKey(Investor, on_delete=models.CASCADE)
 feeder = models.ForeignKey(Fund, on_delete=models.CASCADE)   
 amount = models.DecimalField(max_digits=20, decimal_places=2, default="1")

 def __str__ (self):
    return self.investor

class Fund(models.Model):
 feeder = models.CharField(max_length=100)

 def __str__ (self):
    return  self.feeder

如果我进入shell:

a = Investment.objects.get(pk=1)
a.investor.first_name -> this works 

另一方面:

b = Investor.objects.get(pk=1)
b.investment doesn't work... 
b.investor doesn't work
b.investment.feeder neither.. 

总是得到错误'投资者没有归因'....' -> 如何搜索反向关系?谢谢!!

【问题讨论】:

标签: django relationship


【解决方案1】:

外键是一对多的关系,而不是一对一的关系。在这里,一项投资有一个投资者,但一个投资者有许多投资。因此,对于您的投资者,您需要使用反向关系,默认以set 结尾,并且是经理:

b.investment_set.all()

【讨论】:

  • 你好丹尼尔。非常感谢 !确实。知道如何在 html 模板中使用它。我在那里面临同样的问题:investment.investor.first_name 有效。但是,investor.investment.feeder 不...谢谢!
  • 但是您为什么认为这会起作用?我已经告诉过你,你需要使用investment_set,它是一个管理器,它返回一个你需要遍历的查询集,因为有很多个投资。
  • 问题是我有一个过滤器集。当我包含一个 for 循环来迭代 Investment_set 时,没有任何投资的投资者会从 Queryset 中消失......也许我应该为此创建一个单独的主题
  • 是的,听起来最好
猜你喜欢
  • 2015-09-29
  • 2011-05-06
  • 2016-01-10
  • 2019-03-16
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
相关资源
最近更新 更多