문제

다음 목록이 있습니다. Prediction 모델.양식에 바인딩하고 다시 게시할 수 있도록 허용하고 싶습니다.게시물이 홈/외출 점수와 연결되도록 양식을 구성하려면 어떻게 해야 합니까? Prediction 모델의 id 양식에 바인딩하는 각 항목에 대한 필드는 무엇입니까?

보다

@app.route('/predictor/',methods=['GET','POST'])
@login_required
def predictions():    
    user_id = g.user.id
    prediction= # retrieve prediction
    if request.method == 'POST':
        if form.validate() == False:
            flash('A score is missing, please fill in all predictions')
            render_template('predictor.html', prediction=prediction, form=form)
        else:
            for pred in prediction:
                # store my prediction
            flash('Prediction added')
            return redirect(url_for("predictions"))    
    # display current predictions
    elif request.method == 'GET':
        return render_template('predictor.html', prediction=prediction, form=form)

형태

class PredictionForm(WTForm):
    id = fields.IntegerField(validators=[validators.required()], widget=HiddenInput())
    home_score = fields.TextField(validators=[validators.required()])
    away_score = fields.TextField(validators=[validators.required()])

주형

  <form action="" method="post">
    {{form.hidden_tag()}}
    <table>
        {% for pred in prediction %}
        <tr>
            <td>{{pred.id}}</td>
            <td>{{form.home_score(size=1)}}</td>
            <td>{{form.away_score(size=1)}}</td>               
        </tr>
        {% endfor %}
    </table>
    <p><input type="submit" value="Submit Predictions"></p>
   </form>

내 데이터를 올바르게 바인딩할 수 없습니다. POST.게시 데이터에 모든 항목이 누락되어 필수 유효성 검사기가 계속 실패합니다. 필수의 필드.

도움이 되었습니까?

해결책

예측 목록의 항목에 바인딩할 하위 양식이 필요합니다.

설명하신 양식을 사용하면 단일 예측만 제출할 수 있습니다.반복 가능한 예측을 바인딩하고 각각에 대해 홈 및 어웨이 예측을 원하는 것처럼 보이기 때문에 불일치가 있는 것 같습니다.실제로 현재로서는 결코 다시 게시하지 않습니다. id 필드.이로 인해 항상 양식 유효성 검사가 실패하게 됩니다.내 생각에 당신이 원하는 것은 하위 양식 목록입니다.다음과 같습니다:

# Flask's form inherits from wtforms.ext.SecureForm by default
# this is the WTForm base form. 
From wtforms import Form as WTForm

# Never render this form publicly because it won't have a csrf_token
class PredictionForm(WTForm):
    id = fields.IntegerField(validators=[validators.required()], widget=HiddenInput())
    home_score = fields.TextField(validators=[validators.required()])
    away_score = fields.TextField(validators=[validators.required()])

class PredictionListForm(Form):
    predictions = FieldList(FormField(PredictionForm))

뷰는 다음과 같은 내용을 반환해야 합니다.

predictions = # get your iterable of predictions from the database
from werkzeug.datastructures import MultiDict
data = {'predictions': predictions}
form = PredictionListForm(data=MultiDict(data))

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

귀하의 양식은 다음과 같이 변경되어야 합니다.

<form action='my-action' method='post'>
    {{ form.hidden_tag() }}
    {{ form.predictions() }}
</form>

이제 이것은 <ul><li> FieldList가 수행하는 작업이기 때문에 항목당입니다.스타일을 지정하고 표 형식으로 만드는 것은 여러분의 몫입니다.조금 까다로울 수도 있지만 불가능하지는 않습니다.

POST a에서는 각 예측의 홈 및 어웨이 점수가 포함된 형식 데이터 사전을 얻을 수 있습니다. id.그런 다음 이러한 예측을 다시 SQLAlchemy 모델.

[{'id': 1, 'home': 7, 'away': 2}, {'id': 2, 'home': 3, 'away': 12}]

다른 팁

 {% for key in di_RAA %}
   <tr>
   <td><form id="Run" action="{{ url_for('index') }}" method="post">
        <input type="submit" class="btn" value="TEST" name="RUN_{{key}}"> 
   </form></td>
   </tr>
 {% endfor %}
.

여러 버튼을위한 다른 간단한 솔루션을 제공합니다. FieldList는 각 버튼의 이름과 트리거 기능을 가져 오는 것이 좋습니다.

from wtforms import fields
from wtforms.fields import FieldList, FormField
from wtforms import validators
.

일부 팁, 일부 가져 오기를 추가하고 가져 오기 오류 메시지를 정리하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top