/ / Créer dynamiquement des ressources pour plusieurs modèles django dans tastypie

Créez dynamiquement des ressources pour plusieurs modèles django dans tastypie - python, django, tastypie

J'ai besoin d'exposer plusieurs modèles existants de Djangoau goût. J'ai maîtrisé les bases de la création de ModelResource et de son enregistrement dans urls.py. Cependant, j'aimerais éviter d'écrire des classes Resource pour chaque modèle django et, comme elles doivent toutes fonctionner de la même façon, j'aimerais que ce soit généralisé d'une manière ou d'une autre.

En gros, j’espère archiver avec un ensemble de modèles django classiques:

class ModelA:
field1 = ...
field2 = ...

class ModelB:
field3 = ...
field4 = ...

class ModelC:
field8 = ...
field9 = ...

Et ensuite, ils sont automatiquement exposés à l'API tastypie comme "/ api / v1 / modela /", "/ api / v1 / modelb /" et "/ api / v1 / modelc / etc.

Pas à la recherche d'une solution complète, juste des suggestions pour une bonne approche.

Réponses:

1 pour la réponse № 1

UNE Resource est "juste" une classe python afin que vous puissiez simplement créer une ressource de base et en hériter avec le seul queryset et resource_name Meta attributs définis.

Vous pouvez probablement aussi automatiser la dénomination en manipulant le Resource classe "s __new__ méthode ou créer une coutume classmethod, mais je ne suis pas sûr que l’effort vous rapportera beaucoup.

L'enregistrement des classes sur l'API peut être automatisé de nombreuses manières, l'une d'elles étant:

for name, obj in inspect.getmembers(sys.modules["resources"]):
if inspect.isclass(obj):  # might want to add a few exclusions
v1_api.register(obj())

où "ressources" est le nom du module contenant les ressources, mais c'est un peu implicite.