0

这是models.py中的代码

class Package(models.Model):
  name=models.CharField(max_length=300)
  version=models.CharField(max_length=300,blank=True)
  home_page=models.URLField(blank=True)
  summary=models.TextField()
  description=models.TextField(blank=True)
  keywords=models.TextField(blank=True)
  categories=models.ManyToManyField(Category,related_name='packages')



class Category(models.Model):
  topic=models.ForeignKey(Package, related_name="categories")

当我尝试同步数据库时,它说“未定义 NameError 类别”我尝试先放置类类别,然后再放置包,这次它显示“未定义 NameError 名称包”。

请帮我解决这个问题。

编辑:感谢您的帮助,从我对数据库中的知识知之甚少,这里的教程似乎是错误的http://toys.jacobian.org/presentations/2007/pycon/tutorials/beginning/ 他已经定义了字段类别在 Packages 中为多对多,Category topic 中的字段为 Package 的外键,但外键是多对一的关系,因此实现存在缺陷。我认为 django 试图以它的方式告诉它“字段'主题'的访问器与 m2m 字段'Package.categories'发生冲突。” 字段“主题”的反向查询名称与 m2m 字段冲突“”正确吗?

4

2 回答 2

0

在定义时添加引号category ManyToManyField。改成:

categories=models.ManyToManyField('Category',related_name='packages')

原因:Category添加该字段时未定义,因此需要在其周围添加引号,以便 django 稍后解决。

于 2012-09-22T17:39:30.520 回答
0

“如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身……”

class Package(models.Model):
   ...
  categories=models.ManyToManyField('Category', related_name='packages')
于 2012-09-22T17:37:49.267 回答