2017-02-21 53 views
-1

我是新的瓶子,我試圖根據我的Flask視圖中的不同用戶事件更新模型。我可以在shell中訪問它,並可以使用存儲在其中的數據提取一些字段。但我需要根據某些用戶事件從視圖更新模型。以下是我的模型文件:用Flask視圖中的函數更新Flask中的數據庫模型

class Package(db.Model): 
    __tablename__ = 'package' 

    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    student_id = db.Column(db.Integer, ForeignKey('student_profile.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, id, 

     stripe_id, 
     student_email, 
     subscription_date, 
     expiry_date, 
     is_active, 
     planname, 
     package_price, 
     coupon): 
      self.id = id 
      self.student_id = student_id 
      self.student_email = student_email 
      self.subscription_date = subscription_date 
      self.expiry_date = expiry_date 
      self.is_active = is_active 
      self.planname = planname 
      self.package_price = package_price 
      self.coupon = coupon 

如何等視圖中更新這些:

from models import Package 
@app.route('/somelink', methods=['POST']) 
def somefunc(): 
    if studentdidsomething: 
     planname = 'somename' 
     db.session.commit(planname) 


return render_template('sometemplate.html') 

我需要直接與數據庫表中的工作,所以這就是爲什麼困惑,因爲瓶中有許多形式的口味。 Wtf表單,Alchemyforms和表單。請指教。

回答

0

如果您的數據集不存在,但您需要創建一個代表數據集的模型實例,根據您的用戶事件設置屬性並將實例添加到會話中。如果您已有現有數據集,則需要從數據庫中查詢它並更新所需的值。

from models import Package 


@app.route('/somelink/<package_id>', default={'package_id': None}, methods=['POST']) 
def somefunc(package_id): 
    if package_id is None: 
     package = Package() 
    else: 
     package = Package.query(Package.id=package_id).first_or_404() 

    if studentdidsomething: 
     package.planname = 'somename' 
     db.session.add(package) 
     db.session.commit() 


    return render_template('sometemplate.html') 

在這裏,您可以調用somelink或無package_id。如果你打電話沒有新的包將被創建。否則將使用現有的軟件包。

+0

所以我只需要一個參考來創建/更改所有模型字段的詳細信息?最後兩句話也讓我對你的帖子感到困惑。你的意思是如果我在@ app.route中調用package_id,那麼現有的包會被創建?只是最後一個問題,它會確定當前用戶登錄的更改嗎? –

+0

如果您向url'/ somelink/12'發送了一個post請求,您將更改id爲12的包。如果您向url'/ somelink /'發送了一個post請求(您沒有傳遞包id)包將被創建。 – MrLeeh

相關問題