Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2009 02:21:19

ineu
От:
Зарегистрирован: 2009-02-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

ForeignKey и множество INNER JOINов

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

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



Офлайн

#2 Фев. 23, 2009 00:32:46

ineu
От:
Зарегистрирован: 2009-02-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

ForeignKey и множество INNER JOINов

Спасибо, будем разбираться



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version