Есть 2 модели:
class GenCats(models.Model): class Meta(): managed = False db_table = 'GenCats' ... code = models.IntegerField(db_column='Code') name = models.CharField(max_length=150, db_column='Name') ... class GoodsFolders(models.Model): class Meta(): managed = False db_table = 'GoodsFolders' ... code = models.CharField(max_length=10, db_column='Code') name = models.CharField(max_length=150, db_column='Name') parent = models.ForeignKey('self', db_column='ParentID_Ref', related_name='parentCat', db_index=True) gen_cat = models.ForeignKey(GenCats, db_column='GenCatID_Ref', related_name='mainCat', db_index=True)
Как получить все значения минимумом запросов?
Пробовал так:
catalog = GenCats.objects.select_related('mainCat', 'parentCat')
После вывожу в шаблоне (как пример):
{% for main in Catalog %} {{ main.code }}<br> {{ main.name }}<br> {% for subCat in main.mainCat.all %} ----> {{ subCat.code }} ---- > {{ subCat.name }}<br> {% for subCat2 in subCat.parentCat.all %} >>>>>>>> {{ subCat2.code }} >>>>>>>> > {{ subCat2.name }}<br> {% for subCat3 in subCat2.parentCat.all %} ------------------------------------> {{ subCat2.code }} >>>>>>>> > {{ subCat2.name }}<br> {% endfor %} {% endfor %} {% endfor %} <hr> {% endfor %}
Но как показали тесты, постоянно порождаются новые запросы. И все это происходит неприлично долго…
Помогите разобраться, как вообще принято выводить такую структуру? (необходимо получить все модели GenCats и связанные с ними GoodsFolders, и конечно всех потомков модели GoodsFolders и их потомков….)
PS
да забыл сказать, что у модели GoodsFolders может быть либо parent либо gen_cat, одновременно 2 значения быть не может (там Null). Вообщем структура такая: несколько GenCats, к каждой из которых привязано несколько GoodsFolders, к которым в свою очередь тоже привязано несколько GoodsFolders, и к ним так же привязано несколько GoodsFolders