我目前正在Docker实例中处理Django 1.5.2项目,该项目在单独的Docker实例中与mysql数据库通信。我试图通过创建一个包含两个外键的中间表来创建两个表之间的多对多关系,这两个外键指向需要连接的两个表。当我运行python manage.py syncdb
并向终端发出以下错误时出现问题:NameError: name 'QueryString' is not defined
。我的模型中明确定义了QueryString
。
以下是我的模特......
class Tag(models.Model):
name = models.CharField(max_length=100)
class QueryStringTab(models.Model):
tag = models.ForeignKey(Tag, related_name='querystringtab')
querystring = models.ForeignKey(QueryString, related_name='querystringtab')
class QueryString(BaseObject):
"""
Query string holds an SQL statement and query properties for execution
"""
server_id = models.IntegerField()
schema = models.CharField(max_length=255, blank=True)
query = models.CharField(max_length=60000)
variables = models.TextField(blank=True)
created_by = models.ForeignKey(User, related_name='queries_created')
updated_by = models.ForeignKey(User, related_name='queries_last_edited')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField()
touched_by = models.CharField(max_length=1000)
config = models.TextField(blank=True)
runs_started = models.IntegerField(default=0)
runs_completed = models.IntegerField(default=0)
runs_completed_duration = models.IntegerField(default=0) # total number of seconds spent running this query to completion
formats = "pretty_html html json prettyjson csv excel tableau".split()
值得注意的要点......
1)正好认识Tag
模型。
2)它是否与QueryString
是BaseObject
的事实有关
3)它在mysql数据库中成功创建了Tag
表
有人能找到任何明显我做错的事吗?
答案 0 :(得分:1)
QueryStringTab的声明在QueryStringTab的声明之前;所以当Python评估第一个时,它还没有看到第二个的任何定义,因此会报告一个NameError。
在这种情况下,Django允许你使用字符串目标而不是类对象:
querystring = models.ForeignKey('QueryString', related_name='querystringtab')
或者,你可以简单地将QueryStringTab的定义移到最后。