Django在引用ManyToMany字段时出现NameError

2 投票
1 回答
2728 浏览
提问于 2025-04-16 15:28

我有一个叫做 PlayCat 的表,这个表主要用来存储各种有趣活动的类别名称,比如迪斯科、游泳池等等。所以我希望在用户创建一个游戏场地时,可以选择这些类别(多对多关系),这样每个场地就可以关联到多个活动类别。

游戏:

class Play(models.Model):
  shopname=models.CharField(max_length=100)
  desc=models.CharField(max_length=500,blank=True, null=True)
  address=models.CharField(max_length=300)
  category = models.ManyToManyField(PlayCat)
  url=models.URLField(blank=True, null=True)
  email=models.EmailField(blank=True, null=True)
  slug=models.SlugField(blank=True, null=True)
  phone=models.CharField(max_length=40,blank=True, null=True)

  def __unicode__(self):
    return self.shopname

在同一个 models.py 文件里,我有 'PlayCat'。

class PlayCat(models.Model):
  cat = models.CharField(max_length=45)
  def __unicode__(self):
    return self.cat

我也已经把 PlayCat 数据库填充好了,但当我添加多对多关系时,终端出现了错误信息。

_import__(name)
  File "/home/saud/Downloads/Django-1.2.3/ms/ms/ms/sale/models.py", line 104, in <module>
    class Play(models.Model):
  File "/home/saud/Downloads/Django-1.2.3/ms/ms/ms/sale/models.py", line 108, in Play
    category = models.ManyToManyField(PlayCat)
NameError: name 'PlayCat' is not defined

我不明白为什么会出现 NameError,也不知道我没有定义什么。请帮帮我。谢谢。

1 个回答

15

我想这是因为你在定义模型时,PlayCat是在Play模型之后定义的。所以系统没办法找到它。

你可以把PlayCat放在Play之前定义,或者用字符串来引用它。

category = models.ManyToManyField('PlayCat')

撰写回答