最近我正在做一个需要自定义User模型最大长度的函数。现在我知道我已经学会了如何解决我的要求。
当我输入此代码时,我可以扩展max_length:
User._meta.get_field('username').max_length = 100
User._meta.get_field('email').max_length = 100
我仍然无法理解meta是什么。当我尝试阅读关于元模型的Django文档时,我只知道我应该如何使用元。我需要更多解释,让我真正理解元的内在意义。
模型元相对链接:
https://docs.djangoproject.com/en/1.7/ref/models/options/ https://docs.djangoproject.com/en/1.7/topics/db/models/#meta-options
答案 0 :(得分:1)
来自docs:
模型元数据是“任何不是字段的东西”,例如排序选项(排序),数据库表名称( db_table )或人类可读的单数和复数名称( verbose_name 和 verbose_name_plural )。没有必要,并且将类Meta添加到模型中完全是 可选 。
因此,Meta
只是一个容器类,负责保存附加到模型的metadata
信息。它定义了诸如可用权限,相关数据库表名,模型是否抽象,名称的单数和复数等等。
对于可用的Meta
选项,您可以查看here。
至于你的问题,我肯定会避免将max_length
更改为其他类似值,如您所知,max_length
还会创建database constraint
,例如VARCHAR(64)
Django无法自动更新为新值(100)
。
因此,如果要更改max length
,请确保还更新数据库中相应表列中列的大小:
对于MySQL:
ALTER TABLE auth_user MODIFY username VARCHAR(100);
对于PostgreSQL:
ALTER TABLE auth_user ALTER COLUMN username TYPE VARCHAR(100);