gpt4 book ai didi

python - 您如何为 WTForms-Alchemy 指定 unique=True?

转载 作者:行者123 更新时间:2023-12-03 17:00:05 25 4
gpt4 key购买 nike

我有以下类(class):

class Cloaker(db.Model):
id = db.Column(db.Integer, primary_key=True)
domain = db.Column(db.String(32), unique=True, nullable=False, info={
'description': 'Raw Domain Only (no www). i.e. hello.com',
'validators': raw_domain_validator,
})

(注意域的 unique=True)

使用 WTForm 生成的表单:

class CloakerForm(ModelForm):
class Meta:
model = Cloaker

我有以下代码处理此模型的 CRUD:

@cloaker_bp.route('/new/', methods=['GET', 'POST'])
@cloaker_bp.route('/<cloaker_id>/', methods=['GET', 'POST'])
def cloaker(cloaker_id=None):
cloaker = Cloaker.query.get(cloaker_id) if cloaker_id else Cloaker()
if request.method == 'GET':
form = CloakerForm(obj=cloaker)
form.populate_obj(cloaker)
else:
form = CloakerForm(request.form)
if form.validate():
form.populate_obj(cloaker)
db.session.add(cloaker)
db.session.commit()
return redirect(url_for('.list_cloakers'))

return render_template('cloaker/single.html', form=form, cloaker=cloaker)

当我更新一个对象时,我总是得到域的 Already exists.

当我在 wtforms-alchemy 的网站上关注 Using unique validator with existing objects 时:

  ...(from the CRUD view)... 
else:
form = CloakerForm(obj=cloaker)
#form = CloakerForm(request.form)
form.populate_obj(cloaker)
if form.validate():
db.session.add(cloaker)
db.session.commit()

我得到 This field is required. 域。如果我遵循他们的建议,我不明白 WTForms-Alchemy 如何从 request.form 获取他们的数据。

如何让 unique=True 与我的 View 一起工作?

最佳答案

在 POST/UPDATE 上也有“已经存在”的问题。但是 doc's solution对我的情况有帮助:


obj = MyModel.query.get(1)
表格 = MyForm(obj=obj)
form.populate_obj(obj)
表单验证()

谢谢,因为这个问题帮助我找到了文档中的部分。

关于python - 您如何为 WTForms-Alchemy 指定 unique=True?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com