全局名称'构造函数'未定义

时间:2016-02-26 17:05:06

标签: python flask

我正在创建一个烧瓶应用程序并在其中有一个名为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的文件:

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

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

在ipython控制台中,我使用以下方法导入了Entry模型:

from models import *

但是当我尝试运行commnad时:

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

我收到错误:global name 'constructor' is not defined

我需要帮助搞清楚错误。感谢

2 个答案:

答案 0 :(得分:0)

删除__init__方法的最后一行或将其注释掉:

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

由于constructor未在任何地方定义,因此解释器不允许对其进行引用。

答案 1 :(得分: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()