Модель ForeignKey не имеет менеджера (т. Е. Объект 'Foo' не имеет атрибута 'foo_set') - PullRequest
1 голос
/ 02 марта 2011

Я искал ответ на этот вопрос, но не могу его найти. При использовании ForeignKey, я постоянно получаю сообщение об ошибке, сообщающее, что у объекта 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 '

Я получаю ту же ошибку, если сначала создаю запись Hexes с помощью get_or_create, а затем пробую newboard.boards_set.add () .

Есть идеи? Все предложения приветствуются.

1 Ответ

2 голосов
/ 02 марта 2011

Имя, которое Django использует для обратного менеджера внешних ключей, - это имя модели, содержащей внешний ключ, а не имя модели, в которой работает менеджер.

В вашем случае это будет:

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

Я считаю полезным использовать команду manage.py shell для импорта ваших моделей и проверки их (с помощью dir и т. Д.) Для проверки всех доступных атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...