1

何らかの理由で、このモデルを相互に関連付けることができませんか? そして、AptanaはTest1とTest2が未定義の変数であるという赤い線とエラーを出しています...最初はaptanaが台無しになっているだけだと思ったので、syncdbすることにしましたが、実際にはNameError: name Test1 is not defined?というエラーが表示されますか? 何が理由でしょうか?前もって感謝します!

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()
4

2 に答える 2

4

クラスが定義されている順序です。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)
于 2013-04-03T20:48:10.060 に答える
4

実際に作成される前にモデルを参照しているため、undefinedエラーが発生しています。実際のモデルの代わりにモデル名を文字列として使用してください。

models.OneToOneField('Test2')

ここで述べたように:

まだ定義されていないモデルで関係を作成する必要がある場合は、モデル オブジェクト自体ではなく、モデルの名前を使用できます。

karthikr他のアプローチは、前述のように参照される順序に従って、ファイル内のモデルを並べ替えることです。

于 2013-04-03T20:48:58.147 に答える