如何将HTTP状态码枚举用作Django模型字段选项?
直接用Python标准库HTTPStatus作为Django模型字段选项的方案
你可以直接利用Python标准库中的HTTPStatus枚举类替代自定义的Status枚举,无需手动重复定义状态码,具体实现如下:
完整示例代码
from django.db import models from http import HTTPStatus class ModelA(models.Model): id = models.CharField(max_length=200, primary_key=True) # 直接使用HTTPStatus生成的选项列表 status = models.IntegerField(choices=HTTPStatus.choices, max_length=20, default=HTTPStatus.CREATED)
可选:仅保留常用状态码
如果不需要HTTPStatus中的全部状态码,可以筛选出指定成员生成自定义选项:
from django.db import models from http import HTTPStatus # 筛选需要的HTTP状态码,生成符合Django要求的选项格式 COMMON_HTTP_STATUSES = [ (status.value, status.name) for status in [ HTTPStatus.OK, HTTPStatus.CREATED, HTTPStatus.BAD_REQUEST, HTTPStatus.REQUEST_TIMEOUT, HTTPStatus.INTERNAL_SERVER_ERROR, HTTPStatus.SERVICE_UNAVAILABLE ] ] class ModelA(models.Model): id = models.CharField(max_length=200, primary_key=True) status = models.IntegerField(choices=COMMON_HTTP_STATUSES, max_length=20, default=HTTPStatus.CREATED)
说明:HTTPStatus本身是IntegerEnum的子类,它的choices属性会自动生成(状态码值, 状态码名称)格式的元组列表,完全适配Django IntegerField的choices参数要求。
内容的提问来源于stack exchange,提问作者merhoo
相关产品推荐
相关产品推荐

