首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django models.TextChoices诉models.IntegerChoices

Django models.TextChoices诉models.IntegerChoices
EN

Stack Overflow用户
提问于 2021-09-04 17:18:15
回答 1查看 1.6K关注 0票数 0

这两种密码有什么区别?

代码1:

代码语言:javascript
复制
class YearInSchool(models.TextChoices):
    FRESHMAN = 'FR', _('Freshman')
    SOPHOMORE = 'SO', _('Sophomore')
    JUNIOR = 'JR', _('Junior')
    SENIOR = 'SR', _('Senior')
    GRADUATE = 'GR', _('Graduate')

代码2:

代码语言:javascript
复制
class YearInSchool(models.IntegerChoices):
    FRESHMAN = 1, _('Freshman')
    SOPHOMORE = 2, _('Sophomore')
    JUNIOR = 3, _('Junior')
    SENIOR = 4, _('Senior')
    GRADUATE = 5, _('Graduate')

为什么每个人都使用models.TextChoices,虽然使用models.IntegerChoicesmodels.PositiveSmallIntegerField会占用更少的内存?

我是不是错过了一些我不太理解的东西?

什么时候在models.IntegerChoices上使用models.IntegerChoices,反之亦然?

我之所以问这个问题,是因为在我阅读的django代码中,程序员使用文本选择。我说的是一般情况,即使django版本早于3。

EN

回答 1

Stack Overflow用户

发布于 2021-09-04 17:28:35

选择的格式如下:

代码语言:javascript
复制
choice_format = (db_format, display_format)

db_format是保存到DB中的内容。

display_format是在调用get_<FOO>_display时显示的

基本上,您可以选择在DB中保存哪个、整数还是文本选项。问题是当您的模型被序列化时,如果您有带有year选项的字段YearInSchool(models.IntegerChoices):,那么您将拥有以下内容:

代码语言:javascript
复制
"year": 1

在您的JSON中,但是您希望它显示" freshman ",当然,如果year1,您可以在序列化器级别上操作它来显示新生。

当查找IntegerChoices时,它们的速度要快得多,但是它们太模糊了。如果我是您,我将每次使用IntegerChoices,并通过序列化程序操作响应,以显示文本而不是整数本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69057482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档