我正在使用django-tastypie为我的webapp创建一个rest API。 我想创建如下所述的类,而不是明确地输入它们(我有超过100个类)
class CityResource(ModelResource):
class Meta:
queryset = City.objects.all()
class StateResource(ModelResource):
class Meta:
queryset = State.objects.all()
etc...
我在考虑在python中使用元类(我的方法可能有问题,但仍然希望以这种方式解决它,因为我想看看元类如何帮助我,也许是在现实生活中学习它的好方法)< / p>
我试过了:
class ClassFactory(type):
def __new__(cls, name, bases, dct):
return type.__new__(cls, name, bases, dct)
for model in get_models(app):
name = "%sResource" % model._meta.object_name
ClassFactory(name, (ModelResource, ), {'Meta':type('Meta', (), {'queryset': model.objects.all()})})
但这会产生错误:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
我在谷歌上搜索了它,并且提到了如果一个类派生自另外两个具有两个不同元类的类,那么我生成的类必须具有从两个元类[*]派生的元类。
我可能以错误的方式解决这个问题,但需要一些指示。
答案 0 :(得分:0)
(转发自评论。)
我认为你根本不需要ClassFactory
“元类”。
klass = type(name, (ModelResource, ), {...})
应该根据需要为你提供一个派生自ModelResource的新类。