В моем проекте 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 для этих моделей несколькими способами, и там тоже не было никакого успеха.
object_of_type_c.model_d_set.all()
? - person Daniel Roseman   schedule 20.04.2011