ForeignKey模型没有Manager(即'Foo'对象没有属性'foo_set')

时间:2011-03-02 02:48:36

标签: python django django-models foreign-keys

我一直在寻找答案但找不到答案。使用ForeignKey时,我一直收到错误,告诉我'Foo对象没有属性'foo_set'。我对Django / Python有点新意,所以我确信这里有一个简单的答案,但到目前为止我还没有找到它。这里有一些代码(用于存储用于游戏的各种Boards,每个都应该有一些与之相关的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'对象没有属性'boards_set'

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

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

1 个答案:

答案 0 :(得分:2)

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

在您的情况下,它将是:

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

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