2016-02-26 4 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 с следующий код:

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

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

с консоли IPython я импортировал модель ввода с помощью:

from models import * 

Howe веры, когда я попытался запустить 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() '. Это ссылка на конструктор. Но вы не определили конструктор нигде. Итак, либо определите конструктор перед ссылкой на него, либо удалите ссылку на него. –

ответ

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()