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) 
相關問題