【问题标题】:ForeignKey model has no Manager (i.e., 'Foo' object has no attribute 'foo_set')ForeignKey 模型没有管理器(即“Foo”对象没有属性“foo_set”)
【发布时间】:2011-07-06 23:31:05
【问题描述】:

我已经四处寻找答案,但找不到。使用 ForeignKey 时,我一直收到一条错误消息,告诉我 'Foo 对象没有属性 'foo_set'。我对 Django/Python 有点陌生,所以我确信这里有一个简单的答案,但到目前为止我还没有找到它。下面是一些代码(用于存储游戏中使用的各种棋盘,每个棋盘都应该有许多与之关联的 Hexes):

型号:

class Boards(models.Model):
  boardnum = models.IntegerField(unique=True)
  boardsize = models.IntegerField(default=11)
  hexside = models.IntegerField(default=25)
  datecreated = models.DateTimeField(auto_now_add = True)

class Hexes(models.Model):
  boardnum = models.ForeignKey(Boards, null = True)
  col = models.IntegerField()
  row = models.IntegerField()
  cost = models.IntegerField(default=1)

代码(可行):

newboard, createb = Boards.objects.get_or_create(boardnum=boardn)

createb 返回 True。

代码(紧跟上面的代码,但不起作用):

try:
  hx = newboard.boards_set.create(col=c, row=r)
except Exception, err:
  print "error:", err
  traceback.print_exc()

“err”和“traceback.print_exc()”都给出:AttributeError: 'Boards' object has no attribute 'boards_set'

如果我首先使用 get_or_create 创建 Hexes 记录,然后在其上尝试 newboard.boards_set.add(),我会遇到同样的错误。

有什么想法吗?所有建议都表示赞赏。

【问题讨论】:

    标签: python django django-models foreign-keys


    【解决方案1】:

    Django 用于反向外键管理器的名称是包含外键的模型的名称,而不是管理器所在模型的名称。

    在你的情况下,它将是:

    newboard.hexes_set.create(col=c,row=r)
    

    我发现使用manage.py shell 命令导入模型并检查它们(使用dir 等)以检查所有可用属性很有用。

    【讨论】:

    • 已经完成了(在重置数据库之后),非常感谢 - 我现在看到我在哪里以错误的方式阅读文档。如果你有任何关于通过 shell 检查模型的好指南的链接,我很想拥有它。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2021-04-11
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多