我正在使用 django-tastypie 为我的 web 应用程序创建一个休息 API。我想创建如下所述的类而不明确地全部输入它们(我有超过 100 个类)
class CityResource(ModelResource):
class Meta:
queryset = City.objects.all()
class StateResource(ModelResource):
class Meta:
queryset = State.objects.all()
etc...
我正在考虑在 python 中使用元类(我的方法可能是错误的,但仍然想以这种方式解决它,因为我想看看元类如何帮助我,也许是在现实生活中学习它的好方法)
我试过这个:
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
我用谷歌搜索了这个,到处都提到如果一个类派生自两个具有两个不同元类的其他类,那么我创建的类必须有一个从两个元类派生的元类[*]。
- 在我的情况下,这个错误是如何发生的,因为我是从同一个类 ModelResource 派生的?
- 我不确定我是否理解 [*]
我可能以错误的方式解决了这个问题,但需要一些指示。