6

私の状況は次のとおりです。 への外部SubCategoryキーがTopicあり、へのTopic外部キーがありSubCategoryます。

class SubCategory(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=110)
    description = models.TextField(default='')
    ordering = models.PositiveIntegerField(default=1)
    category = models.ForeignKey(Category)
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    updated_on = models.DateTimeField(blank=True, null=True)
    updated_by = models.ForeignKey(User, related_name='+')
    num_topics = models.IntegerField(default=0)
    num_posts = models.IntegerField(default=0)
    last_topic = models.ForeignKey(Topic, related_name='+')


class Topic(models.Model):
    name = models.CharField(max_length=300)
    slug = models.SlugField(max_length=300)
    description = models.TextField(default='')
    subcategory = models.ForeignKey(SubCategory)
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    updated_on = models.DateTimeField(blank=True, null=True)
    updated_by = models.ForeignKey(User, related_name='+')

このコードを実行すると、次のエラーが発生します。

NameError: name 'Topic' is not defined.

誰かがそれを修正する方法を教えてもらえますか?

4

4 に答える 4

10

どちらかTopicを引用符で囲みます:"Topic"

last_topic = models.ForeignKey("Topic", related_name='+')

またはクラスをクラスTopicの上に置きますSubCategory

于 2013-09-28T20:57:49.677 に答える
0

あなたの問題は、Subcategory の後に Topic が宣言されているため、Subcategory が定義されている場合は使用できないことです。

Python には、部分クラス宣言や前方宣言はありません。しかし、initメソッドを使用して同様のことを実現できます。詳しくはこちらをご覧ください。

于 2013-09-28T20:57:42.640 に答える
-1

問題にはいくつかの解決策があります。属性SubCategoryTopic介して後方参照を定義するかrelated_name ForeignKey、単に ForeignKey モデルの名前を文字列として渡すことができます。

解決策 1:

class SubCategory(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=110)
    description = models.TextField(default='')
    ordering = models.PositiveIntegerField(default=1)
    ...
    last_topic = models.ForeignKey(Topic, related_name='subcategory')

解決策 2:

class SubCategory(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=110)
    description = models.TextField(default='')
    ordering = models.PositiveIntegerField(default=1)
    category = models.ForeignKey(Category)
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    updated_on = models.DateTimeField(blank=True, null=True)
    updated_by = models.ForeignKey(User, related_name='+')
    num_topics = models.IntegerField(default=0)
    num_posts = models.IntegerField(default=0)
    last_topic = models.ForeignKey("Topic", related_name='+')


class Topic(models.Model):
    name = models.CharField(max_length=300)
    slug = models.SlugField(max_length=300)
    description = models.TextField(default='')
    subcategory = models.ForeignKey(SubCategory)
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    updated_on = models.DateTimeField(blank=True, null=True)
    updated_by = models.ForeignKey(User, related_name='+')

    ...
于 2013-09-28T21:03:32.760 に答える