请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

之前不是又一个set_attrs方法来处理表单对模型对么

def set_attrs(self, attrs_dict):
    for key, value in attrs_dict.items():
        if hasattr(self, key) and key != 'id':
            setattr(self, key, value)
user.set_attrs(form.data)

为什么在save_drifrt的时候不用呢,而要用populate_obj

或者说,前面user.set_attrs(form.data) 也可以用form.populate_obj(user) ?

正在回答 回答被采纳积分+3

2回答

提问者 老卢123123 2018-07-23 19:03:59
@web.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        with db.auto_commit():
            user = User()
            user.set_attrs(form.data)
            db.session.add(user)
        return redirect(url_for('web.login'))
    return render_template('auth/register.html', form=form)

上面这个是用set_attrs()


下面这个是用form.popilate_obj()

@web.route('/register2', methods=['GET', 'POST'])
def register2():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        with db.auto_commit():
            user = User()
            form.populate_obj(user)
            # user.set_attrs(form.data)
            db.session.add(user)
        return redirect(url_for('web.login'))
    return render_template('auth/register.html', form=form)


不管调试,还是实际用,效果都是一样的···

0 回复 有任何疑惑可以回复我~
7七月 2018-07-23 16:36:01

这两个方法是相反的呀,你好好想想

0 回复 有任何疑惑可以回复我~
  • 提问者 老卢123123 #1
    没理解,老师讲讲把,我看了下,不都是把form里面的数据传到模型里面么,request.form里面的传递到models里,不需要一个个的写了
    回复 有任何疑惑可以回复我~ 2018-07-23 19:01:01
  • 7七月 回复 提问者 老卢123123 #2
    看错了,这两个方法确实可以实现一样的。但是setAttr的好处在于可以不依赖form。
    回复 有任何疑惑可以回复我~ 2018-07-24 00:13:04
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号