2016-03-26 23 views
-1

Müşterilerin belirli bir menü öğesinin yan öğesini ve miktarını seçip siparişlerine ekleyebileceği bir sayfa oluşturmaya çalışıyorum.'unicode' nesnesinin '_sa_instance_state' özniteliği yok '

class MenuItems(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50), index=True, unique=True) 
    category = db.Column(db.String(50)) 
    price = db.Column(db.Float(6)) 
    description = db.Column(db.String(140)) 
    image_path = db.Column(db.String(140), unique=True) 
    def __unicode__(self): 
     return self.name 

class Orders(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    customer_id = db.Column(db.Integer, db.ForeignKey('customer.id')) 
    created_on = db.Column(db.DateTime) 
    submitted = db.Column(db.Boolean) 
    submitted_on = db.Column(db.DateTime) 
    order_items = db.relationship('OrderItems', backref='orders', lazy='dynamic') 

    def __unicode__(self): 
     return str(self.customer_id) 

class OrderItems(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    order_id = db.Column(db.Integer, db.ForeignKey('orders.id')) 
    menu_item_id = db.Column(db.Integer, db.ForeignKey('menu_items.id')) 
    side_id = db.Column(db.Integer, db.ForeignKey('menu_items.id')) 
    quantity = db.Column(db.Integer) 

    menu_item = db.relationship(MenuItems, foreign_keys=[menu_item_id], 
          backref="menu_item") 
    side_item = db.relationship(MenuItems, foreign_keys=[side_id], 
          backref="side_item") 
    def __unicode__(self): 
     return str(self.id) 
: Ben burada

benim modeller var ... ne olursa olsun ben bir AttributeError nesne hiçbir özelliği 'ni _sa' vardır ne sözler atılır deneyin neyi ... benim veritabanına göndermek için çalışıyorum sorunla çalıştırıyorum

Ve biçim:

class OrderForm(Form): 
    side = SelectField(u'MenuItem', validators=[DataRequired()]) 
    quantity = IntegerField(default=1) 
    submit = SubmitField("Add to Order") 

    def __init__(self, *args, **kwargs): 
     Form.__init__(self, *args, **kwargs) 

    def validate(self): 
     if not Form.validate(self): 
      return False 

ilgili görüşleri:

@login_required 
@davesbread.route('/detail/<menu_item_name>', methods=['GET', 'POST']) 
def detail(menu_item_name): 
    form = OrderForm() 
    form.side.choices=[(s.id, s.name) for s in 
        MenuItems.query.filter_by(category='side').all()] 
    menu_item = MenuItems.query.filter_by(name=menu_item_name).first_or_404() 
    if form.validate_on_submit(): 
     add_to_order(menu_item.id) 
    return render_template('customer/detail.html', title="Dave's Bread - " + menu_item.name, 
          menu_item=menu_item, form=form, user=current_user) 

@login_required 
@davesbread.route('/add_to_order/<menu_item_id>', methods=['GET', 'POST']) 
def add_to_order(menu_item_id): 
    id = menu_item_id 
    form = OrderForm() 
    side = form.side.data 
    quantity = form.quantity.data 
    if current_user.is_anonymous: 
     return redirect(url_for('login')) 
    menu_item = MenuItems.query.filter_by(id=id).first() 
    order_exists = order_loader() 
    if order_exists: 
     order = Orders.query.filter_by(customer_id=current_user.id).first() 
     order_item = OrderItems(menu_item=menu_item, quantity=quantity, 
           side_item=side) 
     order.order_items.append(order_item) 
     db.session.add(order) 
     db.session.commit() 
    else: 
     order_item = OrderItems(menu_item=menu_item, quantity=quantity, 
           side_item=side) 
     order = Orders(customer_id=current_user.id, 
         created_on=datetime.datetime.now(), 
         submitted=False) 
     order.order_items.append(order_item) 
     db.session.add(order) 
     db.session.commit() 
     session['cart'] = True 
     flash('Item added to order') 
    return redirect(url_for('menu', category=menu_item.category)) 

şablonu:bu hataya neden nedir https://gist.github.com/baccb79b31728e63f252

: Burada

{% extends "base.html" %} 

{% block content %} 

<table> 
    <tr> 
    <td> 
     <img src="{{ menu_item.image_path }}"> 
    </td> 
    <td> 
     <h3>{{ menu_item.name }}</h3> 
     <br> 
     <p> {{ menu_item.description }}</p> 
    </td> 
    <td> 
     <form action="{{ url_for('add_to_order', menu_item_id=menu_item.id) }}" 
      method=post> 
     {{ form.hidden_tag() }} 

     {{ form.side }} 

     {{ form.quantity.label }} 
     {{ form.quantity }} 

     {{ form.submit }} 
     </form> 
    </td> 
    </tr> 
<table> 

{% endblock %} 
traceback var? Şimdiden teşekkürler :)

cevap

0

Sorunun here açıklandığı gibi olduğuna inanıyorum: dizenin beklendiği yerde (yani ilgili alan bir ilişki değil, bir dize sütunu) yapıcı parametresi olarak dizgeyi geçiriyorsunuz. Sen side değeriyle sorgulanır uygun MenuItems örneğiyle side_item=side yılında side değiştirmek zorunda

side = form.side.data 
# here side is a string 

# ... 

    order_item = OrderItems(menu_item=menu_item, quantity=quantity, 
          side_item=side) 

# here side_item is expected to be an object 
# as it is defined as a relationship in the model 

:

Örneğin, bu çizgiler size bu hatayı verebilir.

+0

Mükemmel çalışır. Sorgulanan bir öğe ile taraf değiştirme, yüklediklerim eksik –

+0

lütfen çalışan bir çözümü kabul edin. –

İlgili konular