J'ai fait un très long formulaire avec l'aide de l'alchimie de la passoire et de la déformation.
Ce formulaire contient une centaine de champs et actuellement, le seul moyen que je connaisse pour ajouter les données à la base de données une fois le formulaire soumis est de redéfinir explicitement chaque variable, puis de l'ajouter à la base de données, mais il doit y avoir un meilleur moyen.
#my schema
class All(colander.MappingSchema):
setup_schema(None,atr)
atrschema =atr.__colanderalchemy__
setup_schema(None,chemicals)
chemicalsschema =chemicals.__colanderalchemy__
setup_schema(None,data_aquisition)
data_aquisitionschema =data_aquisition.__colanderalchemy__
setup_schema(None,depositor)
depositorschema =depositor.__colanderalchemy__
setup_schema(None,dried_film)
dried_filmschema =dried_film.__colanderalchemy__
form = All()
form = deform.Form(form,buttons=('submit',))
# this is how I get it to work by redefining each field but there must be a better way
if 'submit' in request.POST:
prism_material = request.params['prism_material']
angle_of_incidence_degrees =
request.params['angle_of_incidence_degrees']
number_of_reflections = request.params['number_of_reflections']
prism_size_mm = request.params['prism_size_mm']
spectrometer_ID = 6
page = atr (spectrometer_ID=spectrometer_ID,prism_size_mm=prism_size_mm,number_of_reflections=number_of_reflections,angle_of_incidence_degrees=angle_of_incidence_degrees,prism_material=prism_material)
request.dbsession.add(page)
Would like to somehow just be able to remap all of that 'multi dictionary' that is returned back to the database?
Donc, vous avez un dict ( request.params
) et voulez passer les pars clé-valeur de ce dict à une fonction? Python a un moyen de le faire en utilisant la **kwargs
syntaxe :
if 'submit' in request.POST:
page = Page(spectrometer_ID=6,**request.params)
request.dbsession.add(page)
(cela fonctionne aussi car SQLAlchemy fournit un constructeur par défaut qui attribue les valeurs passées aux colonnes mappées, pas besoin de le définir manuellement)
Bien sûr, il s'agit d'une approche naïve qui ne fonctionnera que pour les cas d'utilisation les plus simples - par exemple, elle peut permettre de passer des paramètres non définis dans votre schéma, ce qui peut créer un problème de sécurité; les noms de champ dans votre schéma doivent correspondre aux noms de champ dans votre modèle SQLAlchemy; il peut ne pas fonctionner avec des listes (c'est-à-dire des valeurs multiples avec le même nom auxquelles vous pouvez accéder via request.params.get_all (nom)).
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots