我一直在寻找答案但找不到答案。使用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(),则会出现相同的错误。
有什么想法吗?所有建议都表示赞赏。
答案 0 :(得分:2)
Django用于反向外键管理器的名称是包含外键的模型的名称,而不是管理器所在模型的名称。
在您的情况下,它将是:
newboard.hexes_set.create(col=c,row=r)
我发现使用manage.py shell
命令导入模型并检查它们(使用dir
等)以检查所有可用属性很有用。