Найти - Пользователи
Полная версия: ForeignKey и множество INNER JOINов
Начало » Django » ForeignKey и множество INNER JOINов
1
ineu
Доброе время суток.
Начал изучать джангу. Столкнулся с непонятным мне поведением админки. Имеем простейшую модель:

ineu@tbw qwe % cat models.py
from django.db import models

class Z(models.Model):
self_1 = models.ForeignKey('self')
def __unicode__(self):
return ‘asd’

и админку:

ineu@tbw qwe % cat admin.py
from django.contrib import admin
from asd.qwe.models import *

class ZAdmin(admin.ModelAdmin):
list_display = ('self_1',)

admin.site.register(Z, ZAdmin)

Заходим на http://127.0.0.1:8000/admin/qwe/z/ и при помощи django-logging видим такой запрос:

SELECT `qwe_z`.`id`, `qwe_z`.`self_1_id`, T2.`id`, T2.`self_1_id`, T3.`id`, T3.`self_1_id`, T4.`id`, T4.`self_1_id`, T5.`id`, T5.`self_1_id`, T6.`id`, T6.`self_1_id`
FROM `qwe_z`
INNER JOIN `qwe_z` T2
ON (`qwe_z`.`self_1_id` = T2.`id`)
INNER JOIN `qwe_z` T3
ON (T2.`self_1_id` = T3.`id`)
INNER JOIN `qwe_z` T4
ON (T3.`self_1_id` = T4.`id`)
INNER JOIN `qwe_z` T5
ON (T4.`self_1_id` = T5.`id`)
INNER JOIN `qwe_z` T6
ON (T5.`self_1_id` = T6.`id`)
ORDER BY `qwe_z`.`id`
DESC

Вопрос - какова логика этой выборки? Насколько я понял из джангобука, система должна просто вызвать Z.__unicode__, а не делать подобные выборки(а если ForeignKey ссылается на другую таблицу, где есть свои ключи, то этот запрос рекурсивно выбирает ВСЕ поля из ВСЕХ таблиц, связанных через ключи).
Система - Debian testing,
ineu@tbw ~ % django-admin –version
1.0.2 final
ineu
Спасибо, будем разбираться
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB