मैंने इसे समझ लिया! मेरा समाधान यहाँ है। उम्मीद है कि यह लेखन अगले व्यक्ति की मदद करेगा।
समाधान विस्तार आपके लिए काम करने देना है! फ्लास्क, डब्ल्यूटीएफओएम, एसक्यूएलकेमी और जिनजा 2 का उपयोग करते हुए डब्ल्यूटी फॉर्म्स एसक्लैल्केमी एक्सटेंशन का एक कामकाजी उदाहरण यहां दिया गया है। संक्षेप में, आपको बच्चे आईडी के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि एक्सटेंशन स्वचालित रूप से इसका ख्याल रखता है। इसका मतलब है कि जब आप एक से अधिक रिश्ते में स्क्लेक्लेमी माता-पिता और बाल मॉडल से निपटते हैं तो आपको केवल माता-पिता से निपटना होगा।
मॉडल
सबसे पहले, सुनिश्चित करें कि आपके मॉडल बनाने के लिए और रिश्तों सही हैं। मेरे उदाहरण में नोटिस कैसे रिश्तों को परिभाषित किया गया है और मॉडल के init में केवल CATEGORY है ... CATEGORY_ID नहीं। मेरी गलती सोच रही थी कि मेरे मॉडल के CATEGORY_ID फ़ील्ड को पॉप्युलेट करना होगा। नहीं। विस्तार आपके लिए करता है। वास्तव में, यदि आप मैन्युअल रूप से ऐसा करने के लिए की तरह मैंने किया था की कोशिश यह बिल्कुल काम नहीं ....
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80))
url = db.Column(db.String(120))
body = db.Column(db.Text)
create_date = db.Column(db.DateTime)
pub_date = db.Column(db.DateTime)
pub_status = db.Column(db.Text(80))
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
author = db.relationship('User',
backref=db.backref('posts', lazy='dynamic'))
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
category = db.relationship('Category',
backref=db.backref('posts', lazy='dynamic'))
def __init__(self, title, body, category, pub_date=None):
self.title = title
self.body = body
if pub_date is None:
pub_date = datetime.utcnow()
self.category = category
self.pub_date = pub_date
def __repr__(self):
return '<Post %r>' % self.title
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
description = db.Column(db.String(250))
def __init__(self, name):
self.name = name
def __repr__(self):
return self.name
दूसरा, प्रपत्र की जाँच .... सूचना मैंने QuerySelectedField sqlalchmey wtfrom उपयोग कर रहा हूँ और category_id क्षेत्र अनुपस्थित है ...
फार्म
from sprucepress.models import Tag, Category
from flask_wtf import Form
from wtforms.fields import StringField, DateTimeField
from wtforms.widgets import TextArea
from wtforms.validators import DataRequired
from wtforms.ext.sqlalchemy.orm import model_form
from wtforms.ext.sqlalchemy.fields import QuerySelectField
def enabled_categories():
return Category.query.all()
class PostForm(Form):
title = StringField(u'title', validators=[DataRequired()])
body = StringField(u'Text', widget=TextArea())
pub_date = DateTimeField(u'date create')
category = QuerySelectField(query_factory=enabled_categories,
allow_blank=True)
अब फ्लास्क मार्ग और देखने तर्क ... पोस्ट में सूचना नहीं फिर category_id! केवल श्रेणी केवल !!!
अनुमार्गण/देखें
# create new post
@app.route('/admin/post', methods=['GET', 'POST'])
@login_required # required for Flask-Security
def create_post():
form = PostForm()
if form.validate_on_submit():
post = Post(title=form.title.data, pub_date=form.pub_date.data,
body=form.body.data, category=form.category.data)
db.session.add(post)
db.session.commit()
flash('Your post has been published.')
return redirect(url_for('admin'))
posts = Post.query.all()
return render_template('create_post.html', form=form, posts=posts)
अंत में, टेम्पलेट। मान लीजिए, हम केवल form.category फ़ील्ड उत्पन्न करते हैं !!!
खाका
<form action="" method=post>
{{form.hidden_tag()}}
<dl>
<dt>Title:
<dd>{{ form.title }}
<dt>Post:
<dd>{{ form.body(cols="35", rows="20") }}
<dt>Category:
<dd>{{ form.category }}
</dl>
<p>
<input type=submit value="Publish">
</form>
परिणाम ... इस समाधान सही ढंग से एक लुकअप तालिका के रूप में श्रेणी मॉडल का उपयोग करता है और पोस्ट category_id क्षेत्र के लिए श्रेणी पी पूर्णांकों लिख कर सही ढंग से पोस्ट पंक्तियों एकत्रित करती है। Yeeeehaww!
मैंने इस मुद्दे को हल किया ... मैं डब्ल्यूटी फॉर्म्स क्वेरीरीइलेफ़िल्फ़ का उपयोग कर रहा हूं इसलिए मेरी गलती सोच रही थी कि मुझे श्रेणी_आईडी फ़ील्ड को जिजा 2 टेम्पलेट में जोड़ने की ज़रूरत है .... डब्ल्यूटीएफ एक्सटेंशन आपके लिए यह सब कुछ संभालता है। तो ... आपको केवल श्रेणी क्षेत्र के बारे में चिंता करना है। यह दृश्य, टेम्पलेट और मॉडल के लिए जाता है। – jwogrady