Dynamically create Resources for multiple django models in tastypie
I need to expose multiple existing django models to tastypie. I got the basics covered with creating af ModelResource and registering it in urls.py. However, I would like to avoid writing Resource classes for every django model and since they all need to work the same way, I would like to have it generalised in some way.
So basically what I hope to archive is with a set of regular django models:
class ModelA: field1 = ... field2 = ... class ModelB: field3 = ... field4 = ... class ModelC: field8 = ... field9 = ...
And then automatically have them exposed to tastypie API as '/api/v1/modela/', '/api/v1/modelb/' and '/api/v1/modelc/ and so forth.
Not looking for a complete solution, just suggestions for a good approach to this.
A Resource is 'just' a python class so you could simply create a base resource and inherit it with only the queryset and resource_name Meta attributes defined.
You could probably automate naming too by fiddling with the Resource class's __new__ method or create a custom classmethod, but I'm not sure the effort will gain you much.
Registering the classes to the api can be automated in numerous ways, of which one could be:
for name, obj in inspect.getmembers(sys.modules['resources']): if inspect.isclass(obj): # might want to add a few exclusions v1_api.register(obj())
where 'resources' is the name of the module containing resources, but this is kind of implicit..