2013-04-09 3 views
3
class Images(models.Model): 
     job=models.OneToOneField(Jobs) 
     image=models.ImageField() 
class Jobs(models.Model): 
     picture=models.ForeignKey(Images, null=True) 

это дает ошибку наупорядочения в модуле Python

job=models.OneToOneField(Jobs) 

это потому, что класс задание определить позже в модуле, но если я изменить положение этих двух классов, то это даст мне ошибку

picture=models.ForeignKey(Images, null=True) 

Что я должен делать в этом случае? (без классов нанесенных в различных модулях)

+0

Вы можете переслать объявление классом? –

+0

@MortenJensen Форвардные объявления не существуют в Python (вся концепция даже не имеет смысла). – delnan

+0

Этот ответ, я думал, был прав, не так ли? Я изменил порядок моих ИностранныхKeys на моем сайте в качестве теста, и он сработал. Ответ был удален 'job = models.OneToOneField (Jobs)' и после класса Jobs добавьте 'Images.job = models.OneToOneField (Jobs)' – bozdoz

ответ

7

Вы можете использовать строку с имя класса для создания экземпляра первой модели до другой был создан:

class Images(models.Model): 
    job=models.OneToOneField('Jobs') 
    image=models.ImageField() 

class Jobs(models.Model): 
    picture=models.ForeignKey(Images, null=True) 

Из docs on models:

Если вам нужно создать отношения на модель, которая еще не была определена, вы может использовать имя модели, а не сам объект модели.

+0

просто хотел опубликовать это :) – krak3n

+0

Does' Images.job = models.OneToOneField (Jobs) 'тоже не работает? – bozdoz

+2

Нет, это не так, Django имеет некоторую метаклассическую магию, которая требует, чтобы поля были созданы внутри тела класса. –

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