我使用泛型和普通URL作为我的REST API,但现在我遇到了问题:我想要自定义操作,简单的视图来为我的模型做一些事情,比如"运行","发布"等.
ViewSet让action装饰者创建自定义动作,但只有在ViewSets中,还有步进路由器,这使我们能够使用railsish convention-over-configuration简化所有操作.
但我发现这ModelViewSet给了我们相同的能力,如泛型:完整的CRUD,序列化器,过滤器,cusstom前/后和查询集,所以,它会导致问题:
为什么有泛型,如果ModelViewSet给予相同的能力和更多?有什么区别?
我得到了带有大量子应用程序的巨大 Django 应用程序。目前,我正在一个子应用程序中重新设计模型,所以我遇到了一个......问题。我有大量分离的丑陋函数来处理模型。基本上,它类似于:
def get_some_things(...):
def postprocess(...):
pass
def preprocess(...):
pass
preprocess(...)
x = MyModel.objects.....get(1)
return postprocess(x, ...)
Run Code Online (Sandbox Code Playgroud)
我有很多这样的功能,它真的很丑!它在当前代码中使用起来很丑陋(如DatabaseAccessor.get_db().django_kitty().get_some_things(...))。所以,我的想法是让开发人员能够像这样使用这些功能:
MyModel.get_some_things(...)
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
MyModel.objects.get_some_things(...)
Run Code Online (Sandbox Code Playgroud)
但!我的函数太多了,所以我无法在model.py 中编写它。所以,我有几个想法:
__getattr__的为MyModel类和类似的模块动态地加载functions_common.py,functions_things.py等等,店内聚集功能于字典和调用需要的?