Ich bekomme Fehler beim Hinzufügen von Daten zu der Tabelle aus einer Ansicht in Flask. Die Tabelle, die ich aktualisieren möchte, hat eine ForeignKey-Beziehung zu einem anderen Modell. Ich versuche jedoch, das Kindmodell zu aktualisieren. Im Anschluss ist ein einfacher Fall:Flask Fehler TypeError: Inkompatible Sammlungsart: Str ist nicht list-like
Modelle:
Eltern Modell
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)
Child Modell
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)
Meine Ansicht:
@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')
Fehler:
TypeError: Incompatible collection type: str is not list-like
Ich werde das versuchen und wird die Antwort ankreuzen, wenn es funktioniert hat. Lass es mich wissen, wenn ich dieses Commit oben stelle, außer: Block wäre vernünftig, es dort zu platzieren? Also, wenn es eine Ausnahme gibt, wird das Modell nicht gespeichert? –
Fügen Sie eine Beziehungslinie zur Plan-Klasse hinzu. Ersetzen Sie die Objekterstellung durch Ihre (wenn request.method ...) – metmirr
Es gibt mir kein Datenbankproblem, aber es sagt "AttributeError: 'str' Objekt hat kein Attribut 'Sitzung'". Problem im Zusammenhang mit diesem Beitrag ist gelöst, so werde ich eine andere Frage eröffnen. Danke für die Hilfe. –