I think you want (I am changing some field names because user and date are 
resrved keywords):

db.define_table('company',
  Field('name'),
  Field('symbol'))

db.define_table('train',
  Field('user_id', 'reference auth_user', default=auth.user_id),
  Field('company', db.company),
  Field('date_event', 'date'),
  Field('num_cars'))


companies = 
db(db.company.id.belongs(db(db.train.user_id==id)._select(db.train.company,distinct=True)).select(orderby=db.company.name)




On Friday, 11 January 2013 17:05:02 UTC-6, Dave Cenker wrote:
>
> I am putting together a website for my son so that he can keep track of 
> trains that he has seen in our area. Here are the applicable models:
>
> db.define_table('company',
>   Field('name'),
>   Field('symbol'))
>
> db.define_table('train',
>   Field('user', 'reference auth_user', default=auth.user_id),
>   Field('company', db.company),
>   Field('date', 'date'),
>   Field('numCars'))
>
> I would like to be able to select all the trains that a particular user 
> has seen. I believe I can accomplish this with the following:
>
> currUserQuery = db.train.user == auth.user_id
> allTrainsSeenByUser = db(currUserQuery).select(orderby='date desc')
>
> What I would like to do is create an index page for each user that splits 
> out the trains of each company that have been seen. For example, assume 
> that there are three companies in the database: Amtrak, CSX, and BNSF. Of 
> these three companies the user has seen trains from Amtrak and CSX. On 
> their index page, they would see all the Amtrak trains that they have seen 
> grouped together and all the CSX trains that they have seen grouped 
> together. Therefore, I would like to perform a database selection that 
> finds all the trains for a particular user and a particular company.
>
> I have found a way to determine which companies a particular user has seen 
> using the following:
>
> companies = db(currUserQuery).select('train.company', 
> distinct=True).as_list()
>
> However, this returns a list of company IDs instead of names and when I 
> try to do something like this:
>
> db(train.company.id == id) it doesn't work.
>
> What I'd really like to do is get a list of the names of the companies 
> that a user has seen and then make a database selection based upon those 
> names in a manner like this:
>
> db(currUserQuery & (db.train.company.name == companyNameText)).select()
>
> However, the db.train.company.name doesn't work. Is there a way to 
> progress down the hierarchy (if you will) to access the company name on a 
> particular train row given the database structure above. With Django (which 
> I have used in the past), this would be accomplished similar to this 
> (train__company__name=companyNameText), but I can't figure out the 
> corresponding way to do so in web2py.
>
> Thanks for any help you can provide!
>
> Dave
>
>

-- 



Reply via email to