Field("my_field", requires=IS_IN_DB(db, db.some_table))
Field("my_field_2", db.some_table_2)
db.define_table("test_person", Field("fname", requires=IS_NOT_EMPTY()), Field("lname", requires=IS_NOT_EMPTY()), format = "%(fname)s %(lname)s")
db.define_table("test_manufacturer", Field("name"), format = "%(name)s")
db.define_table("test_model", Field("manufacturer", requires=IS_IN_DB(db, db.test_manufacturer)), Field("model_year"), Field("model"), format = "%(model_year)s %(manufacturer)s %(name)s")
db.define_table("test_model_configuration", Field("model", requires=IS_IN_DB(db, db.test_model)), Field("config", label="Configuration"), format = "%(model)s %(config)s")
db.define_table("test_vehicle", Field("vehicle_owner", requires=IS_IN_DB(db, db.test_person)), Field("model_config", requires=IS_IN_DB(db, db.test_model_configuration), label="model"), Field("vin", label="VIN"), format = "%(vehicle_owner)s's %(model)s")
db.define_table("test_model_2", Field("manufacturer", db.test_manufacturer), Field("model_year"), Field("model"), format = "%(model_year)s %(manufacturer)s %(model)s")
db.define_table("test_model_configuration_2", Field("model", db.test_model_2), Field("config", label="Configuration"), format = "%(model)s %(config)s")
db.define_table("test_vehicle_2", Field("vehicle_owner", db.test_person), Field("model_config", db.test_model_configuration_2, label="model"), Field("vin", label="VIN"), format = "%(vehicle_owner)s's %(model)s")
It appears that there are two ways to get a field to reference another table,and
Field("my_field", requires=IS_IN_DB(db, db.some_table))
Field("my_field_2", db.some_table_2)
The problem with both of these (and especially the first one), is that I can't seem to get the format for my_field to grab the format of some_table and my_field_2 can't grab the format from tables that some_table_2 uses in its format.
format = "%(model_year)s %(manufacturer)s %(name)s"
format = lambda r: '%s %s %s' % (r.model_year, r.manufacturer.name, r.name)
It appears that there are two ways to get a field to reference another table,and
Field("my_field", requires=IS_IN_DB(db, db.some_table))
Field("my_field_2", db.some_table_2)
The problem with both of these (and especially the first one), is that I can't seem to get the format for my_field to grab the format of some_table and my_field_2 can't grab the format from tables that some_table_2 uses in its format.
Now that I've spent a little more time implementing your answer, I've noticed that the answers are sorted by id. Is there any way to take the table object and sort it? I've already tried .sorted(), but as expected, it didn't work. This seems like the sort of thing you'd do in a controller, so I can understand why you wouldn't be able to do this in db.py.
Field('manufacturer', 'reference test_manufacturer',
requires=IS_IN_DB(db, 'test_manufacturer.id', db.test_manufacturer._format, sort=True))
Field('manufacturer', 'reference test_manufacturer',
requires=IS_IN_DB(db, 'test_manufacturer.id', db.test_manufacturer._format,
orderby=db.test_manufacturer.name))