2013-05-02 60 views
1

我需要将多个现有的django模型暴露给tastypie。我获得了创建af ModelResource并在urls.py中注册的基础知识。但是,我想避免为每个django模型编写Resource类,并且因为它们都需要以相同的方式工作,所以我希望以某种方式进行推广。在tastypie中动态创建多个django模型的资源

所以基本上是一组普通的Django模型的什么,我希望存档:

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

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

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

,然后自动让他们暴露在tastypie API为 '/ API/V1/MODELA /',“/ API/v1/modelb /'和'/ api/v1/modelc /等等。

没有寻找一个完整的解决方案,只是一个很好的方法建议。

回答

1

A Resource是'只是'一个python类,所以你可以简单地创建一个基本资源并继承它,只用定义的querysetresource_name元属性。

你也许可以通过摆弄Resource类的__new__方法来自动命名,或者创建一个自定义的classmethod,但我不确定这些努力会为你带来多大收益。

注册类的API可以以多种方式,其中一种可能是实现自动化:

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

其中“资源”是一个包含资源的模块的名称,但是这是一种含蓄。 。

+0

谢谢,这是有道理的。如果我想生成Resource类以及它们的自定义查询集和名称,我正在考虑使用类似于: rclass = type(cls .__ name __ +'Resource',(ModelResource,),{'Meta':type 'Meta',(object,),{'queryset':cls.objects.all(),'resource_name':cls .__ name__})}) – 2013-05-02 10:45:47

相关问题