我已经四处寻找这个问题的答案,但找不到。使用外键时,我不断收到错误消息,告诉我“Foo 对象没有属性“foo_set”。我对 Django/Python 有点陌生,所以我确信这里有一个简单的答案,但到目前为止我还没有找到它。下面是一些代码(用于存储游戏中使用的各种棋盘,每个棋盘都应该有多个与之关联的六角形):
型号:
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(),我会收到相同的错误。
有什么想法吗?感谢所有建议。
最佳答案
Django 用于反向外键管理器的名称是包含外键的模型的名称,而不是管理器所在模型的名称。
就您而言,它将是:
newboard.hexes_set.create(col=c,row=r)
我发现使用 manage.py shell
命令导入模型并检查它们(使用 dir
等)以检查所有可用属性非常有用。
关于python - foreignKey 模型没有 Manager (即 'Foo' 对象没有属性 'foo_set' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162874/