2015-09-08 2 views
0

Я пытаюсь использовать библиотеку контента django, и я заметил что-то странное.Почему django Идентификаторы ContentType изменяются?

Следующая строка:

for content_type in ContentType.objects.all(): 
    print "%s: %s" % (content_type.id, content_type.model) 

печатает различные идентификаторы для каждого из моих моделей в зависимости от того, когда это называется.

Когда я запускаю тестовый пакет, сначала печатает это:

1: logentry 
2: permission 
3: group 
4: user 
5: contenttype 
6: session 
12: tagtagrule 
15: concepttag 
16: difficultytag 
17: questiontypetag 
18: questionformattag 
19: sharedassetconcepttag 
20: curriculumtag 
21: objectposition 
22: usermediaimage 
23: objecttag 

Но после этого сообщения:

Creating test database for alias 'default'... 

Кажется переиндексации все и печатает это:

1: logentry 
2: permission 
3: group 
4: user 
5: contenttype 
6: session 
7: concepttag 
8: difficultytag 
9: questiontypetag 
10: questionformattag 
11: sharedassetconcepttag 
12: curriculumtag 
13: tagtagrule 
14: objecttag 

Что здесь происходит?

ответ

3

кажется, что в первом случае код печати работает слишком рано в процессе, перед подключением БД по умолчанию были обменены на тестовой базе данных с помощью Django тест бегун ...

после Creating test database for alias 'default'... сообщение означает, Django создал отдельную базу данных, которая будет использоваться всеми тестами

тогда, когда ваш код тиражи снова вы видите содержание, как в тестовой БД

разный порядок и разрывных идентификаторами содержания типы в вашем default db отражают порядок, в котором вы добавили (и удалили) модели из своего проекта во время разработки

последовательность непрерывных идентификаторов в тестовом db отражает тот факт, что она просматривала все ваши текущие модели и создавала для них типы контента в свежем пустое db

Вы должны Определенно не ожидайте, что ваши типы контента будут иметь определенные значения идентификатора в ваших тестах (или код проекта). Вы должны получить типы контента, запросив их на model и app_label.

Смежные вопросы