Django 休息框架 : is it possible to modify a Serializer class at runtime?

标签 django django-rest-framework

我看到我可以在运行时轻松修改 Serializer 的 Meta 选项(我什至不确定这是调用它的正确方法,我读到有人称它为猴子补丁,即使我不喜欢它):

NodeDetailSerializer.Meta.fields.append('somefield')

如果我需要执行以下操作怎么办:
NodeDetailSerializer.contact = serializers.HyperlinkedIdentityField(view_name='api_node_contact', slug_field='slug')
NodeDetailSerializer.Meta.fields.append('contact')

为什么我需要这样做?
我正在尝试构建一个模块化应用程序,我有一些可以添加的可选应用程序,它们会自动将一些功能添加到核心应用程序中。
我想将两个应用程序的代码分开,因为其他应用程序可能会移动到不同的存储库中。

编写模块化和可扩展的应用程序确实是一项棘手的工作。
如果有人有一些有用的资源可以分享,想知道更多。

费德里科

最佳答案

我找到了解决我的问题的方法。

我的问题是:我需要能够在不编辑核心应用程序代码的情况下添加指向其他资源的超链接。我需要从附加模块的代码中做到这一点。

我写了这个序列化程序 mixin:https://gist.github.com/nemesisdesign/8132696

可以这样使用:

from myapp.serializers import MyExtensibleSerializer

MyExtensibleSerializer.add_relationship(**{
    'name': 'key_name',
    'view_name': 'view_name_in_urls_py',
    'lookup_field': 'arg_passed_to_to_view_name'
})

关于Django 休息框架 : is it possible to modify a Serializer class at runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023297/

相关文章:

python - Django Rest Framework 中模型方法中的业务逻辑在哪里?

Django Rest框架与djoser token 身份验证检索用户first_name

Django rest 框架 - 过滤多对多字段

Django:检索对象的最佳方式

django - 如何让我的 Django 网站充当开放 ID 提供商?我希望登录的用户能够将我的网站用作 openid 提供商

python - django:自定义包含标签错误,错误信息:无效的 block 标签

python - 使用 cookiecutter-django 设置项目时无法运行迁移

Django rest框架自定义返回响应

python - 未提供身份验证凭据。部署到 AWS 时

python - 在django rest framework中加入相关模型