2017-02-25 9 views
0

Flask의보기에서 테이블에 데이터를 추가 할 때 오류가 발생합니다. 업데이트하려고하는 테이블에 다른 모델에 대한 ForeignKey 관계가 있습니다. 그러나 자식 모델을 업데이트하려고합니다.Flask error 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 

답변

1

패키지 및 계획 모델은 관계, 그래서 당신은 패키지 모델이

planname = relationship('Plan', backref=backref('package')) 

모델을 계획하는 package라는 이름의 속성을 추가 아래 라인을 가지고,이 속성은하지 않는 패키지에 대한 참조입니다 계획을 세워서 그런 패키지 객체를 만들 수는 없습니다.

이 솔루션은의이 계획 클래스는 이런 일이 생각한 계획 모델에 대한 동일한 관계를 가지고 있어야입니다 다음과 같이

planname= relationship('Package', backref=backref('plan')) 

지금 당신이 패키지 개체를 만들 수 있습니다 : 물론

plan = Plan(name='yearlyrec') 
package = Package(is_active=True, plan=plan) 

을 이 시나리오에서 기존 Plan 개체를 쿼리하고 사용할 수 있습니다.

+0

나는 이것을 시도 할 것이고 그것이 효과가 있다면 답을 틱 할 것이다. 위의 커밋을 위에 적어 주시면 알려 드리겠습니다 : 블록은 거기에 배치하는 것이 합리적일까요? 그럼 예외 모델이 있다면 저장되지 않을까요? –

+0

계획 클래스에 관계 선을 추가하십시오. – metmirr

+0

데이터베이스 문제가 아니지만 "AttributeError : 'str'개체에 '세션'속성이 없습니다."라는 메시지가 표시됩니다. 이 게시물과 관련된 문제가 해결되었으므로 다른 질문을하겠습니다. 도와 주셔서 감사합니다. –