我正在创建一个烧瓶应用程序并在其中有一个名为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
我需要帮助搞清楚错误。感谢
答案 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()