django:为啥我们在 modelSerializer 中使用嵌套的元类?

Posted

技术标签:

【中文标题】django:为啥我们在 modelSerializer 中使用嵌套的元类?【英文标题】:django: Why do we use a nested meta class inside modelSerializer?django:为什么我们在 modelSerializer 中使用嵌套的元类? 【发布时间】:2017-11-07 17:09:12 【问题描述】:

我是 python 以及 django 和学习序列化程序的新手。我观察到,在定义序列化程序类时,它需要一个嵌套的元类。我对这个元类概念不太了解,所以我搜索了一下,发现元类是一个实例是类的类。即使读完之后我也很困惑。外部序列化程序类是内部元类的实例吗?在这里使用这个元类有什么需要?

【问题讨论】:

不,这是一个完全不同的概念。这里它只是一个带有一些定义的内部类。但是整个 Django 都使用相同的概念。真的,在你学习 django-rest-framework 之前,你应该学习 Django。如果你有,这种模式不会让你感到惊讶。 【参考方案1】:

Python 的元类和 Django 的元类是不同的概念。

您在 google 上找到的是关于 Python 的 元类,这是 Django 框架大量使用的构造,但不是在其面向用户的代码中。 This blog post 解释了 Django 如何在框架代码中使用元类。

另一方面,Django 的 Meta 类,它是一些框架最前端元素中使用的内部类结构:Models、Forms、Serializers、ModelAdmins 等。这些类描述了某个特定的配置在运行时或迁移时读取但未严格保存在数据库中的元素,因为它们与数据库无关。例如,如果未指定 order,框架需要知道该模型的 QuerySet 的首选顺序是什么时,它会读取模型的 Meta 配置。当调用is_valid 时,表单将读取它必须验证的字段。等等。

【讨论】:

以上是关于django:为啥我们在 modelSerializer 中使用嵌套的元类?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Django 中使用 SlugField()?

为啥在graphene-django中中继?

为啥 django 2 在 python 2 下可用?

Django本身提供了runserver,为啥不用来部署

为啥我需要在 Django 中将 kwargs 设置为 CBV 的参数

为啥 Django 中没有“ListField”?