0
从Flask中的视图向表中添加数据时出现错误。我试图更新的表具有与另一个模型的ForeignKey关系。但是我正在尝试更新子模型。下面是一个简单的例子:Flask错误TypeError:不兼容的集合类型:str不是类似列表的
型号:
父模型
class Student(db.Model):
__tablename__='student'
....
package = package = relationship('Package', backref=backref('student'))
....
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
子模型
class Package(db.Model):
__tablename__ = 'package'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
student_id = db.Column(db.Integer, ForeignKey('student.id'))
stripe_id = db.Column(db.String(45))
student_email = db.Column(db.String(20))
subscription_date = db.Column(db.DateTime, default=today)
expiry_date = db.Column(db.DateTime, default=deadline)
is_active = db.Column(db.Boolean, default=True)
planname = relationship('Plan', backref=backref('package'))
package_price = db.Column(db.Integer)
coupon = db.Column(db.String(12))
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
笔者认为:
@app.route('/yearlychargedrec', methods=['GET', 'POST'])
def yearly_charged_rec():
if not user_authorized():
return redirect('/')
# customer
stripe_token = request.form['stripeToken']
email = request.form['stripeEmail']
customer = stripe.Customer.create(
email=email,
source=request.form['stripeToken']
)
try:
subscription = stripe.Subscription.create(
customer=customer.id,
plan="yearlyrec",
)
except stripe.error.CardError as e:
# The card has been declined
body = e.json_body
err = body['error']
if request.method == 'POST':
# email = email
package = Package(
is_active=True,
planname = 'yearlyrec',
)
db.session.add(package)
db.session.commit()
return render_template('/profile/charge/monthlycharge.html')
错误:
TypeError: Incompatible collection type: str is not list-like
我会试试这个,如果它能工作的话,会打勾。让我知道,如果我把这个提交上面,除了:块将它放在那里是合理的?那么如果有异常模式将不会被保存? –
将关系线添加到计划类。用你的替换对象创建(如request.method ...) – metmirr
它没有给我任何数据库问题,但它说“AttributeError:'str'对象没有属性'会话'”。与这篇文章相关的问题已解决,因此我将打开另一个问题。感谢帮助。 –