2012-11-29 15 views
10

मैं कोई प्रोग्रामर नहीं हूं, इसलिए कृपया मेरे साथ सौम्य रहें। मैं WTForms का उपयोग कर रहा हूं, काफी सफलतापूर्वक, लेकिन मुझे छिपे हुए फ़ील्ड में समस्याएं वापस नहीं लौटने में समस्या है, जबकि दस्तावेज़ कहते हैं कि उन्हें चाहिए। मैंने एक साधारण उदाहरण बनाया है, उम्मीद है कि यह स्पष्ट है;wtforms छुपा फ़ील्ड मान

forms.py:

from wtforms import (Form, TextField, HiddenField) 

class TestForm(Form): 
    fld1 = HiddenField("Field 1") 
    fld2 = TextField("Field 2") 

experiment.html:

{% from "_formshelper.html" import render_field %} 
<html> 
    <body> 
     <table> 
     <form method=post action="/exp"> 
      {% for field in form %} 
       {{ render_field(field) }} 
      {% endfor %} 
      <input type=submit value="Post"> 
     </form> 
     </table>   
    </body> 
</html> 

(render_field सिर्फ टीडी टैग में लेबल, क्षेत्र और त्रुटियों डालता है)

प्रयोग .py:

from flask import Flask, request, render_template 

from templates.forms import * 
from introspection import * 

app = Flask(\__name__)     
app.config.from_object(\__name__) 
db_session = loadSession() 

@app.route('/exp', methods=['POST', 'GET']) 
def terms(): 
    mydata = db_session.query(Peter).one() 
    form = TestForm(request.form, mydata) 
    if request.method == 'POST' and form.validate(): 
     return str(form.data) 
    return render_template('experiment.html', form = form) 

if __name__ == '__main__': 
    app.run(debug = True) 

mydata एक तालिका से एकमात्र पंक्ति देता है जिसमें 2 फ़ील्ड, fld1 और fld2 है। fld1 एक पूर्णांक autoincrement फ़ील्ड है। फ़ॉर्म उस डेटा के साथ पॉप्युलेट किया गया है, इसलिए यदि मैं फॉर्म सबमिट करता हूं, तो जब मैं फॉर्म जमा करता हूं तो मुझे मिलता है:

{'fld2': u'blah blah blah ',' fld1 ': u'1'}

लेकिन अगर मैं HiddenField को fld1 बदलने के लिए, जब मैं हिट भेजते हैं तो मैं मिलता है: { 'fld2': u'blah, ऐसा ',' fld1 ': यू' '}

क्या मैं गलत कर रहा हूँ? प्रत्याशा में धन्यवाद।

+0

ने अभी सीखा है कि स्पष्ट रूप से हमें टेम्पलेट में छिपे हुए फ़ील्ड को स्पष्ट रूप से जोड़ने की आवश्यकता नहीं है, वे 'फॉर्म' टैग के नीचे फ्लास्क-डब्ल्यूटीएफ द्वारा हमारे लिए जोड़े गए हैं। – jxramos

उत्तर

10

मुझे संदेह है कि आपका छुपा क्षेत्र या तो (1) मान सेट नहीं है, या (2) render_field मैक्रो इसे सही ढंग से नहीं बना रहा है। अगर मुझे शर्त लगानी पड़ी, तो मैं कहूंगा कि आपकी "mydata" ऑब्जेक्ट में आपके द्वारा अपेक्षित मान नहीं हैं।

मैंने आपके कोड को न्यूनतम से कम कर दिया, और यह मेरे लिए काम करता है। नोट मैं स्पष्ट रूप से दोनों क्षेत्रों के लिए एक मूल्य दे रहा हूँ:

from flask import Flask, render_template, request 
from wtforms import Form, TextField, HiddenField 

app = Flask(__name__) 

class TestForm(Form): 
    fld1 = HiddenField("Field 1") 
    fld2 = TextField("Field 2") 


@app.route('/', methods=["POST", "GET"]) 
def index(): 
    form = TestForm(request.values, fld1="foo", fld2="bar") 
    if request.method == 'POST' and form.validate(): 
    return str(form.data) 

    return render_template('experiment.html', form = form) 

if __name__ == '__main__': 
    app.run() 

और

<html> 
<body> 
<table> 
    <form method=post action="/exp"> 
     {% for field in form %} 
      {{field}} 
     {% endfor %} 
     <input type=submit value="Post"> 
    </form> 
</table> 
</body> 
</html> 

यह मैं देता { 'fld2': u'bar ',' fld1 ': u'foo'} मैं के रूप में उम्मीद करेंगे।

जांचें कि mydata में "fld1" विशेषता है और इसका मूल्य है। मैं इसे स्पष्ट रूप से फॉर्म = टेस्टफॉर्म (request.values, obj = mydata) की तरह सेट कर सकता हूं - ऐसा लगता है कि डब्ल्यूटीएफ की देखभाल नहीं होगी, लेकिन मुझे कभी-कभी अजीब तरह से पिक्य होने के कारण जला दिया गया है।

यदि यह आपके लिए काम नहीं करता है, तो वापस आएं और अपना HTML पोस्ट करें और माइडाटा के मूल्य क्या हैं।

+3

हाय राहेल। आपके उत्तर के लिए धन्यवाद, और बहुत शीघ्र होने के लिए। यह मैक्रो था जो मूल्य खो रहा था। सब ठीक है – SkinnyPete63

+0

बहुत बढ़िया, मुझे खुशी है। –

संबंधित मुद्दे