模型中的 class 元数据是什么?
What is class meta in model?
最近在做一个功能,需要自定义用户模型的最大长度。现在我知道我已经学会了如何解决我的需求。
当我输入这段代码时,我可以扩展 max_length:
User._meta.get_field('username').max_length = 100
User._meta.get_field('email').max_length = 100
我还是不明白meta是什么。当我尝试阅读有关元模型的 Django 文档时,我只知道我应该如何使用元模型。我需要更多的解释,让我真正理解meta的内在含义。
模型元相关 link:
https://docs.djangoproject.com/en/1.7/ref/models/options/
https://docs.djangoproject.com/en/1.7/topics/db/models/#meta-options
来自 docs:
Model metadata is “anything that’s not a field”, such as ordering options (ordering), database table name (db_table), or human-readable singular and plural names (verbose_name and verbose_name_plural). None are required, and adding class Meta to a model is completely optional.
因此,Meta
只是一个容器 class,负责保存附加到模型的 metadata
信息。它定义了诸如可用权限、关联数据库 table 名称、模型是否抽象、名称的单数和复数版本等内容。
对于可用的 Meta
选项,您可以查看 here。
至于你的问题,我肯定会避免将 max_length
更改为其他类似的值,如你所知,max_length
还会创建一个 database constraint
,例如 VARCHAR(64)
无法由 Django 自动更新为新值 (100)
。
因此,如果您想更改 max length
,请确保您还更新了数据库中相应 table 列中的列大小:
对于MySQL:
ALTER TABLE auth_user MODIFY username VARCHAR(100);
对于 PostgreSQL:
ALTER TABLE auth_user ALTER COLUMN username TYPE VARCHAR(100);
最近在做一个功能,需要自定义用户模型的最大长度。现在我知道我已经学会了如何解决我的需求。
当我输入这段代码时,我可以扩展 max_length:
User._meta.get_field('username').max_length = 100
User._meta.get_field('email').max_length = 100
我还是不明白meta是什么。当我尝试阅读有关元模型的 Django 文档时,我只知道我应该如何使用元模型。我需要更多的解释,让我真正理解meta的内在含义。
模型元相关 link:
https://docs.djangoproject.com/en/1.7/ref/models/options/ https://docs.djangoproject.com/en/1.7/topics/db/models/#meta-options
来自 docs:
Model metadata is “anything that’s not a field”, such as ordering options (ordering), database table name (db_table), or human-readable singular and plural names (verbose_name and verbose_name_plural). None are required, and adding class Meta to a model is completely optional.
因此,Meta
只是一个容器 class,负责保存附加到模型的 metadata
信息。它定义了诸如可用权限、关联数据库 table 名称、模型是否抽象、名称的单数和复数版本等内容。
对于可用的 Meta
选项,您可以查看 here。
至于你的问题,我肯定会避免将 max_length
更改为其他类似的值,如你所知,max_length
还会创建一个 database constraint
,例如 VARCHAR(64)
无法由 Django 自动更新为新值 (100)
。
因此,如果您想更改 max length
,请确保您还更新了数据库中相应 table 列中的列大小:
对于MySQL:
ALTER TABLE auth_user MODIFY username VARCHAR(100);
对于 PostgreSQL:
ALTER TABLE auth_user ALTER COLUMN username TYPE VARCHAR(100);