什么是模型中的类元?

时间:2015-02-25 07:25:22

标签: python django model

最近我正在做一个需要自定义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

1 个答案:

答案 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);