Доброе время суток.
Начал изучать джангу. Столкнулся с непонятным мне поведением админки. Имеем простейшую модель:
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