2013-04-03 45 views
1

出於某種原因,我無法讓這個模型與對方有任何關係?而Aptana給我的紅線和錯誤說Test1和Test2是未定義的變量...起初我認爲它只是aptana搞亂了,所以我決定syncdb它,但它實際上給我錯誤說NameError:名稱Test1沒有定義?可能是什麼原因?提前致謝!Django模型中的NameError?爲什麼我不能在模型中引用某些東西?

from django.db import models 
from django.contrib.auth.models import User 
from django.utils.translation import ugettext as _ 
from userena.models import UserenaBaseProfile 

class MyProfile(UserenaBaseProfile): 
    user = models.OneToOneField(User, unique=True, verbose_name=_('User'), related_name='my_profile') 
    favourite_snack = models.CharField(_('favourite snack'), max_length=5) 
    test1 = models.ManyToManyField(Test1) 

class Test1(models.Model): 
    name = models.CharField(max_length=255, blank=False) 
    test2 = models.OneToOneField(Test2) 

class Test2(models.Model): 
    name = models.CharField() 

回答

2

它是定義類的順序。 Python解釋器不會執行正向查找 這應該解決您的問題。

from django.db import models 
from django.contrib.auth.models import User 
from django.utils.translation import ugettext as _ 
from userena.models import UserenaBaseProfile 

class Test2(models.Model): 
    name = models.CharField() 

class Test1(models.Model): 
    name = models.CharField(max_length=255, blank=False) 
    test2 = models.OneToOneField(Test2) 

class MyProfile(UserenaBaseProfile): 
    user = models.OneToOneField(User, unique=True, verbose_name=_('User'), related_name='my_profile') 
    favourite_snack = models.CharField(_('favourite snack'), max_length=5) 
    test1 = models.ManyToManyField(Test1) 
+0

這很簡單...謝謝!但現在談到我的下一個問題。爲什麼下面的工作?從django.db進口機型 類T1(models.Model): T2 = models.ForeignKey(T2) 類T2(models.Model): T1 = models.ForeignKey(T1) – user2242246 2013-04-03 20:55:34

+0

蟒是一種解釋語言,口譯員一行一行。在引用test1時,它不具備執行正向查找的功能。因此拋出錯誤 – karthikr 2013-04-03 20:56:46

+0

真棒!謝謝!!現在做出完美的感覺! – user2242246 2013-04-03 21:01:20

2

你引用的模型,它被創造之前實際上也就是爲什麼你undefined錯誤,使用型號名稱爲字符串,而不是實際的模型:如前所述here

models.OneToOneField('Test2') 

If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself

其他方法是按照它們被引用的順序對文件中的模型進行重新排序karthikr提及。

+0

謝謝!這有助於所有! – user2242246 2013-04-03 21:02:09

+0

我想添加一個到你的答案,因爲我不能接受這兩個答案,但因爲即時通訊新的沒有聲譽不能甚至投票... – user2242246 2013-04-03 21:13:29

+0

@ user2242246沒有問題。重要的是,它幫助你。 – 2013-04-03 21:14:31

相關問題