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..