SQLAlchemy Query посторонние поля - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь написать запрос вида / SQLAlchemy, который позволит мне отображать данные, связанные как ForeignKey, а также где у меня есть отношение ManyToMany

имеют модели ..

#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)  

Но я не могу написать запрос, который будет отображать каждый образец и примечание, относящиеся к номеру клиента?Если бы кто-нибудь мог помочь, я был бы очень благодарен:)

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Попробуйте это

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 голосов
/ 12 марта 2012

В итоге получилось:

#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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...