#django #django-models
#django #django-модели
Вопрос:
У меня есть простой случай с двумя моделями: Item и Category с множеством элементов между ними. Я хочу показать страницу со списком всех категорий и для каждой категории список элементов. У меня сотни категорий, поэтому django обращается к БД сотни раз (при переборе категорий и вызове items.all () для каждой из них). Мне нужно выбрать данные из промежуточной таблицы вручную и использовать select_related () для извлечения элемента и категории для каждой записи — один запрос вместо сотен.
Я знаю, что введение ‘through’ решило бы проблему, но я не хочу делать это сейчас, потому что это может нарушить существующий код (использование through делает невозможным использование add, create или assignment для создания отношений — чего я хочу пока избежать).
Итак, возможно ли это вообще без создания модели для промежуточной таблицы?
Ответ №1:
Вы могли бы создать модель для вашей существующей таблицы и просто не использовать ее в качестве поля through для m2m и сделать ее неуправляемой. например:
class ItemCategory(models.Model):
item = models.ForeignKey('Item')
category = models.ForeignKey('Category')
class Meta:
db_table = 'the_name_of_the_existing_m2m_table'
managed = False
Во всяком случае, что-то вроде этого.
Комментарии:
1. Мне пришлось добавить app_label в мета-класс, чтобы мое исправление заработало.