2012-03-09 108 views
0

我想寫一個視圖/ SQLAlchemy的查詢,讓我來顯示數據,多數民衆贊成鏈接爲一個ForeignKey和也是我有一個多對多的關係SQLAlchemy的查詢外鍵字段(S)

有機型..

#Samples 
class Sample(Base): 
    __tablename__ = 'samples' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode) 

    def __unicode__(self): 
     return self.name 

samples_to_customer = Table('samples_to_customer', Base.metadata, 
    Column('customer_id', Integer, ForeignKey('customer.id')), 
    Column('sample_id', Integer, ForeignKey('samples.id')) 
) 

#Create a cusotmer model to store customer numbers 
class Customer(Base): 
    __tablename__ = 'customer' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode, unique=True) #this will be the variable used to search the existing db 
    customer_samples = relationship('Sample', secondary='samples_to_customer', backref='samples') 
    sales_rep = Column(Integer, ForeignKey('rep.id')) 
    Rep = relationship('Rep') 

    def __unicode__(self): 
     return self.name 

# This model will have its own entry view/page a user logs on and enters notes (according to a customer 
# number) they then get stored/saved onto the Customers account 
class Note(Base): 
    __tablename__ = 'note' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode) 
    pub_date = Column(Date) 
    customer_no = Column(Integer, ForeignKey('customer.id')) 
    customer = relationship('Customer') 

    def __unicode__(self): 
     return self.name 

而且觀點..

@view_config(route_name='view_customer', renderer='templates/view_customer.jinja2') 
def view_page(request): 
    customer_no = request.matchdict['customer'] 
    cust_slcustm = DBSessionRO.query(Slcustm).filter(Slcustm.customer == customer_no).first() 
    cust_customer = DBSessionRO.query(Custom).filter(Custom.cu_custref== customer_no).first() 

    # Return a 404 if a result isn't found, slcustm and customer share one2one relationship on customer_no 
    if cust_slcustm is None: 
     return HTTPNotFound('No such customer') 

    return dict(cust_slcustm=cust_slcustm, cust_customer=cust_customer) 

但我似乎無法編寫一個查詢,將顯示每一個與客戶相關的數字樣本,並注意?如果有人可以幫助我將非常感激:)

+1

這是更好如果你可以把你的代碼放在這裏;) – sacabuche 2012-03-09 16:37:20

+2

你試過了什麼?什麼工作,什麼沒有?你有錯誤嗎?你收到錯誤的數據了嗎? – katrielalex 2012-03-09 16:58:19

回答

0

什麼結束了工作是:

#views.py 
@view_config(route_name='view_customer', renderer='templates/view_customer.jinja2') 
def view_page(request): 
    customer_no = request.matchdict['customer'] 
    cust_slcustm = DBSessionRO.query(Slcustm).filter(Slcustm.customer == customer_no).first() 
    cust_customer = DBSessionRO.query(Custom).filter(Custom.cu_custref== customer_no).first() 
    cust_books = DBSessionRW.query(Customer).filter(Customer.name == customer_no).first() 

    # Return a 404 if a result isn't found, slcustm and customer share one2one relationship on customer_no 
    if cust_slcustm is None: 
     return HTTPNotFound('No such customer') 

    return dict(cust_slcustm=cust_slcustm, cust_customer=cust_customer, cust_books=cust_books) 

然後創建模板:

{% for sample in cust_books.customer_samples %} 
    {{ sample.name }} 
{% endfor %} 
1

試試這個

class Note(Base): 
    __tablename__ = 'note' 
    id = Column(Integer, primary_key=True) 
    name = Column(Unicode) 
    pub_date = Column(Date) 
    customer_no = Column(Integer, ForeignKey('customer.id')) 
    customer = relationship('Customer', backref='notes') 

@view_config(route_name='view_customer', renderer='templates/view_customer.jinja2') 
def view_page(request): 
    customer_no = request.matchdict['customer'] 
    cust = DBSessionRO.query(Customer).filter(Customer.id == customer_no).first() 

    print "Sample :", cust.customer_sample 
    print "Notes :", cust.notes 
+0

backref幫助我進行了另一次鬥爭,謝謝! :) – Crooksey 2012-03-12 15:05:21