У меня есть BaseModel (models.Model) и ExtendedModelA (BaseModel) и ExtendedModelB (BaseModel). ExtendedModelA и ExtendedModelB имеют внешние поля для других моделей. Их методы unicode возвращают поле этой модели, связанной с внешним ключом.Django - расширенные расширенные модели запросов
У меня есть выпадающее меню, которое я хочу заполнить объектами BaseModel (что, естественно, включает объекты ExtendedModelA и ExtendedModelB). Для этого мне нужен набор запросов, который получит все расширенные объекты (тип A и B) и связанные с ними объекты.
У меня есть объединенное QuerySet:
queryset = BaseModel.objects.filter(type=1).select_related('extendedmodela') | BaseModel.objects.filter(type=2).select_related('extendedmodelb')
Проблема заключается в том, что юникода представление BaseModel представлен в выпадающем списке. Если добавить метод Юникода к классу BaseModel, который имеет условие:
if hasattr(self, extendedmodela):
return self.extendedmodela.__unicode__()
else:
return self.extendedmodelb.__unicode__()
В результате запросов к базе данных для каждого объекта.
Любые идеи о том, как избавиться от этого беспорядка?
По существу мне нужно сформулировать запрос, который будет эффективно получать все объекты BaseModel, а когда они отображаются в раскрывающемся списке, их методы юникода для их соответствующих расширенных классов (которые печатают поля из объекта поля внешнего ключа) не забивают база данных. У меня есть несколько тысяч объектов, поэтому база данных попадает в хит.
Приветствия,
Дин
Не можете ли вы иметь смешанный список/набор экземпляров 'ExtendedModelA/B'? – schwobaseggl
Я не уверен - довольно новый для Django –