2
我想要一个WTForms-Alchemy窗体来填充Cloaker
模型的template_id
字段。但是,我收到一个错误消息,说在调用populate_obj
时,SQLAlchemy无法调整Template
。我认为我的关系设置正确。为什么没有正确设置所选模板的表单?WTForms-Alchemy QuerySelectField无法使用模型实例填充model_id字段
class Template(db.Model):
id = db.Column(db.Integer, primary_key=True)
cloaker = relationship('Cloaker', backref='cloaker')
class Cloaker(db.Model):
id = db.Column(db.Integer, primary_key=True)
template_id = db.Column(db.Integer, db.ForeignKey('template.id'), nullable=False)
class CloakerForm(ModelForm):
class Meta:
model = Cloaker
template_id = QuerySelectField(
query_factory=lambda: Template.query.all(),
get_pk=lambda a: a.id,
get_label=lambda a: a.name,
allow_blank=True,
blank_text=u'-- please choose --'
)
form.populate_obj(cloaker)
提供了以下错误:
ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'Template' [SQL: 'INSERT INTO cloaker (status, created_at, updated_at, domain, safepage_url, moneypage_url, template_id, "user", company, country, connection_id, lp) VALUES (%(status)s, %(created_at)s, %(updated_at)s, %(domain)s, %(safepage_url)s, %(moneypage_url)s, %(template_id)s, %(user)s, %(company)s, %(country)s, %(connection_id)s, %(lp)s) RETURNING cloaker.id'] [parameters: {'status': None, 'domain': u'1', 'moneypage_url': u'asdv', 'template_id': <automata.cloaker.models.Template object at 0x10fd87990>, 'country': u'', 'created_at': datetime.datetime(2017, 5, 4, 23, 12, 3, 380155), 'connection_id': u'', 'updated_at': datetime.datetime(2017, 5, 4, 23, 12, 3, 380167), 'safepage_url': u'sdv', 'user': u'asdva', 'lp': u'', 'company': u''}]
感谢您的回复。我仍然得到这个错误:https://gist.github.com/vincentwhales/390993779c994bb6d5dcd98db5c1a1f0我必须手动分配template_id字段自我验证后在POST? – Sparrowcide
这是一个无关紧要的问题。该字段不能为空,但根据您的打印语句,您没有选择模板,因此它是无。选择一个模板,或者使该字段不可选。你在问题中询问的问题是固定的:'populate_obj'正确设置'cloaker.template = None',因为你没有选择任何东西。 – davidism