这两种密码有什么区别?
代码1:
class YearInSchool(models.TextChoices):
FRESHMAN = 'FR', _('Freshman')
SOPHOMORE = 'SO', _('Sophomore')
JUNIOR = 'JR', _('Junior')
SENIOR = 'SR', _('Senior')
GRADUATE = 'GR', _('Graduate')代码2:
class YearInSchool(models.IntegerChoices):
FRESHMAN = 1, _('Freshman')
SOPHOMORE = 2, _('Sophomore')
JUNIOR = 3, _('Junior')
SENIOR = 4, _('Senior')
GRADUATE = 5, _('Graduate')为什么每个人都使用models.TextChoices,虽然使用models.IntegerChoices和models.PositiveSmallIntegerField会占用更少的内存?
我是不是错过了一些我不太理解的东西?
什么时候在models.IntegerChoices上使用models.IntegerChoices,反之亦然?
我之所以问这个问题,是因为在我阅读的django代码中,程序员使用文本选择。我说的是一般情况,即使django版本早于3。
发布于 2021-09-04 17:28:35
选择的格式如下:
choice_format = (db_format, display_format)db_format是保存到DB中的内容。
display_format是在调用get_<FOO>_display时显示的
基本上,您可以选择在DB中保存哪个、整数还是文本选项。问题是当您的模型被序列化时,如果您有带有year选项的字段YearInSchool(models.IntegerChoices):,那么您将拥有以下内容:
"year": 1在您的JSON中,但是您希望它显示" freshman ",当然,如果year是1,您可以在序列化器级别上操作它来显示新生。
当查找IntegerChoices时,它们的速度要快得多,但是它们太模糊了。如果我是您,我将每次使用IntegerChoices,并通过序列化程序操作响应,以显示文本而不是整数本身。
https://stackoverflow.com/questions/69057482
复制相似问题