2017-01-07 3 views
0

Я новичок в колбе, создавая веб-приложение на основе колб. Я использую flask-sqlalchemy для подключения к моему sqlite db.Запись на две связанные модели колб-sqlalchemy из одного источника

Когда я импортирую данные из формы и записываю их в базу данных, столбец «apple_id» в модели «Груша» содержит NULL для каждой записи. Предполагается, что он должен содержать идентификатор «Apple». Другие данные записываются так, как я ожидал. Две таблицы имеют отношения «один ко многим», на одно яблоко можно ссылаться несколькими грушами.

Я упростил сценарий, чтобы было легче анализировать.

в models.py:

from flask import current_app, request, url_for 
from . import db 

class Apple(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64)) 

class Pear(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    apple_id = db.Column(db.Integer, db.ForeignKey('cabinet.id')) 
    amount = db.Column(db.Integer) 

В views.py

from . import edit 
from flask import render_template, url_for, redirect, flash 
from .forms import ApplePearForm 
from ..models import Apple, Pear 
from .. import db 

@edit.route('/apples-and-pears', methods=['GET', 'POST']) 
def apples_and_pears(): 
    form = ApplePearForm() 
    if form.validate_on_submit(): 
     apple = Apple(name=form.name.data) 
     db.session.add(apple) 
     pear = Pear(apple_id=apple.id, amount=4) 
     db.session.add(pear) 
     flash('fruit was added to database') 
     return redirect(url_for('browse.fruit_list')) 
    return render_template('edit/apples_and_pears.html', form=form) 

ответ

0

Если вам нужны отношения между таблицами, вы должны использовать relationship определить. backref добавить ссылку на обе стороны, чтобы вы могли это сделать pear=Pear(apple=apple):

class Apple(db.Model): 
    ... 
    pears = db.relationship('Pear', backref='apple') 

class Pear(db.Model): 
    ... 
    apple_id = db.Column(db.Integer, db.ForeignKey('cabinet.id') 

#view 
apple = Apple(...) 
pear = Pear(apple=apple, ...) 

 Смежные вопросы

  • Нет связанных вопросов^_^