2016-04-28 69 views
1

我目前正在一個Docker實例中的Django 1.5.2項目中,這個實例與單獨的Docker實例中的mysql數據庫對話。我試圖通過創建一個包含兩個指向需要連接的兩個表的外鍵的中間表來創建兩個表之間的多對多關係。運行python manage.py syncdb時出現問題,它向終端輸出以下錯誤:NameError: name 'QueryString' is not defined。我的模型中明確定義了QueryStringDjango模型外鍵不識別'QueryString'BaseObject

這裏是我的模型...

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)難道有事可做的事實,QueryStringBaseObject
3)成功地在MySQL數據庫中

任何人都可以找到任何明顯的是,我做錯了創建Tag表?

+0

據我所知,如果你想使用Django的自動生成的數據庫訪問API,你需要使用models.Model類。所以我想你的本能2)是對的。 –

+1

什麼是BaseObject類? –

回答

1

QueryStringTab的聲明位於QueryStringTab的聲明之前;所以當Python評估第一個時,它還沒有看到第二個定義,因此報告一個NameError。

的Django允許你使用字符串目標小於情況下,類對象是這樣的:

querystring = models.ForeignKey('QueryString', related_name='querystringtab') 

或者,你可以簡單地QueryStringTab的定義移動到結束。

+0

非常感謝!我剛剛從JS切換到Python,在基礎知識上有點生疏。你可能已經幫我省下了我的PM的咀嚼。最好的祝願! –