2013-08-06 4 views
1

Итак, когда вы импортируете устаревшую базу данных с помощью функции inspectdb django, она заявляет, что вам нужно вручную очистить «порядок сортировки моделей». В документации на веб-сайте django говорится: «В частности, вам необходимо изменить порядок моделей, чтобы модели, которые относятся к другим моделям, упорядочены правильно».Импорт устаревшей базы данных в django

Что именно это означает? Если модель A относится к модели B, то модель B должна появиться перед моделью A в файле?

+0

Вы можете указать ссылку на документацию, на которую указываете? – jsalonen

ответ

3

In the documentation on the django website it states "In particular, you’ll need to rearrange models’ order, so that models that refer to other models are ordered properly."

What exactly does this mean?

В Python в целом, чтобы обратиться к любому имени, его необходимо определить в первую очередь; потому что только тогда он отображается; так что это приведет к ошибке:

print(hello) 
hello = 'world' 

Аналогично, в models.py, когда вы ссылаетесь на другую модель класса в любых отношениях; вы должны убедиться, что класс объявлен до его упоминания, или вам нужно указать имя класса. Поскольку проверка не может гарантировать порядок создаваемых моделей, вы получаете предупреждение. Он предназначен для предотвращения такого сценария, который приведет к ошибке:

class A(models.Model): 
    foo = models.ForeignKey(B) 

class B(models.Model): 
    name = models.CharField(max_length=200) 

Чтобы исправить это, вы можете объявить B до того A:

class B(models.Model): 
    name = models.CharField(max_length=200) 

class A(models.Model): 
    foo = models.ForeignKey(B) 

Или использовать строку вместо имени:

class A(models.Model): 
    foo = models.ForeignKey('B') 

class B(models.Model): 
    name = models.CharField(max_length=200) 
+0

В вашем последнем примере, если вы используете строку вместо имени, она все равно ссылается на нее правильно? – dl8

+0

Да. Эта функция приведена в документации, но в поле [справочная ссылка на поле] (https://docs.djangoproject.com/en/1.5/ref/models/fields/#lazy-relationships). –