It appears that there are two ways to get a field to reference another
table,
Field("my_field", requires=IS_IN_DB(db, db.some_table))
and
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.
To be more concrete about it, I'm building an application that tracks
service work done on vehicles. I'd like to have a table of manufacturers,
then a table that references the manufacturers and associates them with
models, then configurations of those models, then particular vehicles that
associate a configuration and an owner with other data like the VIN. In
both formulations that I've tried, the admin interface becomes incredibly
confusing because I'm mostly having to remember what id is associated with
a particular entry. Here's a simplified version of my code so far:
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")
I suppose I could get this to work if I had a "flatter" database. That is,
if I stuffed the manufacturer, model, and configuration into a single
table, the vehicle would only be "looking up" one table and could grab all
the information it needed. However, I can see this being a problem when I
want to start doing things with the vehicles (e.g. "John Doe's 1999 Honda
Accord LX"), which I don't want to be displayed as "82's 16 1" for which
I'd have to look up the id numbers to make any sense of it.
If I need to ignore the admin interface entirely during this initial
testing phase, I'm still not sure what the most Pythonic/web2pythonic way
of getting all the information into my views is. My guess is that it would
be done in the controller by making a dictionary associating id numbers
with desired formats, but that seems like it would require a lot of
looping, which would bog everything down in a large-scale application.
Basically, I'm completely stumped as to the intelligent/"right" way to
proceed.
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.