Объект не имеет атрибута «подготовить»

В моем проекте django у меня есть 4 модели, которые связаны друг с другом в цепочку.

Модель_D > Модель_C > Модель_B > Модель_A

Таким образом, Model_C имеет поле внешнего ключа, указывающее на Model_B, а Model_B имеет поле внешнего ключа, указывающее на Model_A.

Когда я выполняю поиск, как показано ниже, я получаю следующую ошибку

Model_D.objects.filter(model_c = object_of_type_c)

Я получаю сообщение об ошибке "Model_C не имеет атрибута "подготовить""

Но когда я делаю поиск таким образом, я не получаю ошибки

Model_D.objects.filter(model_c__id = object_of_type_c.id)

or

Model_D.objects.filter(model_c = object_of_type_c.id)

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

РЕДАКТИРОВАТЬ: Существует 5-я модель, Model_E, которая также привязана к Model_C. У меня такая же проблема при попытке поиска по этой модели. Я не знаю, имеет ли это значение.

Самое странное, что он отлично работает для аналогичных поисков для Model_C или Model_B.

ОБНОВИТЬ:

http://code.djangoproject.com/ticket/13640

Model_C имеет метод с именем «вычислить», который является зарезервированным именем. Устраняет проблему путем переименования метода.

Я пытался настроить значения related_name для этих моделей несколькими способами, и там тоже не было никакого успеха.


person Piper Merriam    schedule 20.04.2011    source источник
comment
Работает ли это, если вы выполняете тот же запрос, но через обратную связь? то есть object_of_type_c.model_d_set.all()?   -  person Daniel Roseman    schedule 20.04.2011
comment
да. при доступе через связанное имя я получаю обратную связь. Также обратите внимание, что я отредактировал исходный пост с информацией о моей 5-й модели, которая также привязана к модели c.   -  person Piper Merriam    schedule 20.04.2011
comment
Пожалуйста, опубликуйте определение ModelC.   -  person Daniel Roseman    schedule 20.04.2011
comment
вставил выше. Изменено только название модели, чтобы соответствовать моей предыдущей схеме именования. Общая информация — это абстрактный базовый класс, общий для всех моделей, которые только что имеют поля created_date и updated_date со значениями auto_now_true и auto_now.   -  person Piper Merriam    schedule 20.04.2011
comment
Я нашел свою проблему code.djangoproject.com/ticket/13640. В Model_C есть метод, называемый "оценить ', что, очевидно, является зарезервированным именем.   -  person Piper Merriam    schedule 20.04.2011
comment
Добавьте ответ на свой вопрос, а затем отметьте его как отвеченный на тот случай, если у кого-то еще возникнет такая же проблема, и им будет проще найти решение. ;)   -  person James Khoury    schedule 21.04.2011


Ответы (1)


http://code.djangoproject.com/ticket/13640

Эта ошибка возникает, когда вы определяете метод модели с именем «вычислить». Переименование метода решает проблему.

person Piper Merriam    schedule 21.04.2011