2016-02-26 78 views
-3

我創建一個燒瓶應用程序,有一個名爲models.py內部的某一模塊用以下代碼:全局名稱「構造」沒有定義

import datetime, re 

from app import db 

def slugify(s): 
    return re.sub('[^\w]+', '-', s).lower() 

class Entry(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(100)) 
    slug = db.Column(db.String(100), unique=True) 
    body = db.Column(db.Text) 
    created_timestamp = db.Column(db.DateTime, default=datetime.datetime.now) 
    modified_timestamp = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now) 

    def __init__(self, *args, **kwargs): 
     super(Entry, self).__init__(*args, **kwargs) # Call parent 
     constructor.self.generate_slug() 

    def generate_slug(self): 
     self.slug = '' 
     if self.title: 
      self.slug = slugify(self.title) 

    def __repr__(self): 
     return '<Entry: %s' % self.title 

我還創建了一個名爲create_db.py與文件下面的代碼:

from models import * 

豪:

import os, sys 
sys.path.append(os.getcwd()) 
from main import db 

if __name__ == '__main__': 
    db.create_all() 

從IPython的控制檯I採用進口的入門型號版本,當我試圖運行commnad:

Entry = (title='A post about flask', body='This is the post body.') 

我得到的錯誤:global name 'constructor' is not defined

我需要幫助找出錯誤。由於

+3

您對錯誤有什麼不瞭解? –

+3

錯誤告訴你到底是什麼問題:代碼中沒有任何名爲'constructor'的東西。你認爲這條線應該做什麼?你爲什麼使用'constructor'?你認爲應該怎麼做? –

+3

在'Entry .__ init__'中,你有'constructor.self.generate_slug()'。這是對'constructor'的引用。但是你沒有在任何地方定義'constructor'。因此,在引用它之前定義'constructor',否則刪除對它的引用。 –

回答

0

刪除你的__init__方法的最後一行或評論它就像這樣:

def __init__(self, *args, **kwargs): 
    super(Entry, self).__init__(*args, **kwargs) # Call parent 
    # constructor.self.generate_slug() 

由於constructor不被任何定義,解釋不能讓對它的引用。

0

正如其他人所提到的,constructor未定義。但是,它看起來像你只需要刪除該名稱;如果您將constructor.self.generate_slug()更改爲self.generate_slug()您的代碼應該正常工作。

def __init__(self, *args, **kwargs): 
    super(Entry, self).__init__(*args, **kwargs) # Call parent 
    self.generate_slug() 
相關問題