2015-05-04 106 views
1

我知道这个标题看起来很熟悉一些旧问题,但我已经看过他们中的每一个,他们都没有解决。这里是我的代码:TypeError:__init __()需要1个位置参数,但有3个被给出

TypeError: __init__() takes 1 positional argument but 3 were given 

Traceback (most recent call last) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1836, in __call__ 
return self.wsgi_app(environ, start_response) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1820, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1403, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\_compat.py", line 33, in reraise 
raise value 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1817, in wsgi_app 
response = self.full_dispatch_request() 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1381, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\_compat.py", line 33, in reraise 
raise value 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request 
rv = self.dispatch_request() 
File "C:\Users\hp user\virtual_flask\lib\site-packages\flask\app.py", line 1461, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "C:\Users\hp user\PycharmProjects\flask123\views.py", line 19, in create 
create_post = Post(my_form.title.data, my_form.text.data) 
TypeError: __init__() takes 1 positional argument but 3 were given 
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error. 
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side. 

You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection: 

dump() shows all variables in the frame 
dump(obj) dumps all that's known about the object 

我班如下:

Models.py

from app import db 
from datetime import datetime 


class Post(db.Model): 
    post_id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(100)) 
    text = db.Column(db.Text()) 
    created_time = db.Column(db.DateTime()) 

    def __init__(self, title, text, created_time=None): 
     self.title = title 
     self.text = text 
     if created_time is None: 
      self.created_time = datetime.utcnow() 
     else: 
      self.created_time = created_time 

views.py

from app import app, db 
from flask import render_template, request, url_for 
from forms import CreateForm 
from models import Post 


@app.route('/') 
def homepage(): 
    return render_template('base.html') 


@app.route('/create', methods=['GET', 'POST']) 
def create(): 
    form = CreateForm(csrf_enabled=False) 
    if request.method == 'GET': 
     return render_template('create.html', form=form) 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      create_post = Post(form.title.data, form.text.data) 
      db.session.add(create_post) 
      db.session.commit() 
    return redirect(url_for('homepage')) 

我已经与所有可能的解决方案尝试并检查我的代码拼写错误,但我没有发现。

+0

可能来源:1 。你的'db.Model'基类 - 不管它是什么 - 用'__init__'做奇怪的事情, 2.在你的views.py中,“models.Post”不是你期望的那样(错误的模块? 'Post'名称稍后在模型或视图模块中被阴影化?),3.您的'__init__'函数在models.py中严格缩进,所以'Post'使用继承的'__init__',42.某人在您的代码上施加了一个咒语。你有没有尝试过检查你的视角中的“Post”?就像你知道的,用打印语句或调试器? –

回答

4

误差

TypeError: __init__() takes 1 positional argument but 3 were given

发生在码

create_post = Post(my_form.title.data, my_form.text.data) 

相反通过位置参数创建Post对象的,通keyword arguments

create_post = Post(title=my_form.title.data, text=my_form.text.data) 
相关问题