У меня проблема с работой с FieldList внутри моей формы.
WTForms имеет два метода, которые работают с родительской формой (populate_obj для отправки и процесс извлечения данных в запросе get), но я не могу коснуться данных из вложенного FieldList.
У меня есть подозрение, что проблема может заключаться в моделях. Соотношение между таблицами много-много, используя таблицу ассоциаций.
модели
TracksCatalogTable = Table('tracks_catalog_table',
Base.metadata,
Column('tracks_id', Integer, ForeignKey('tracks.id')),
Column('catalog_id', Integer, ForeignKey('catalog.id'))
)
class Tracks(Base):
__tablename__ = 'tracks'
id = Column(Integer, primary_key=True)
isrc = Column(String(30))
track_name = Column(String(255))
track_number = Column(Integer)
artist_id = Column(Integer, ForeignKey('artist.id', ondelete='CASCADE'))
catalog_tracks = relationship("Catalog",
secondary=TracksCatalogTable,
back_populates="tracks_catalog")
class Catalog(Base):
__tablename__ = 'catalog'
id = Column(Integer, primary_key=True)
catalog_number = Column(String(255))
catalog_name = Column(String(255))
artist_id = Column(Integer, ForeignKey('artist.id'))
contract_id = Column(Integer, ForeignKey('contract.id', ondelete='CASCADE'))
tracks_catalog = relationship("Tracks",
secondary=TracksCatalogTable,
back_populates="catalog_tracks")
формы
class AddTrackForm(FlaskForm):
isrc = StringField('ISRC')
artist_id = SelectField('Track Artist', choices=artist_list, coerce=int)
track_name = StringField('Track Name')
track_number = IntegerField('Track Number')
class AddCatalogForm(FlaskForm):
catalog_number = StringField('Catalog Number', validators=[DataRequired()])
catalog_name = StringField('Album Name', validators=[DataRequired()])
artist_id = SelectField('Artist Name', choices=artist_list)
tracks = FieldList(FormField(AddTrackForm, default=lambda: Tracks()))
submit = SubmitField('Submit')
представления
@works.route("/works/edit_catalog/<catalog_id>", methods=['GET', 'POST'])
def edit_catalog(catalog_id):
catalog_obj = db_session.query(Catalog).get(catalog_id)
form = AddCatalogForm()
if request.method == 'POST':
form.populate_obj(obj = catalog_obj)
db_session.add(catalog_obj)
db_session.commit()
return redirect(url_for('works.catalog'))
if request.method == 'GET':
form.process(obj=catalog_obj)