Django数据表和枚举

时间:2016-09-11 11:06:06

标签: python django enums

我的广告系列模型如下:

id campaign    objective             platform
1  Hello Word  MOBILE_APP_ENGAGEMENT Facebook
2  Hi There    VIDEO_VIEWS_PREROLL   Twitter

型号:

class Campaign(Model):
    id = models.TextField(primary_key=True)
    name = models.TextField(default="")
    objective = models.TextField(null=True)
    platform = enumfields.EnumField(Platform, max_length=10, null=True)

该广告系列包含Twitter和FB广告系列。

客观字段是一个自由文本,但我对它不满意。

我想创建2个不同的枚举(enum34):

class FacebookObjective(Enum):
  MOBILE_APP_ENGAGEMENT
  MOBILE_APP_DOWNLOAD

class TwitterObjective(Enum):
  VIDEO_VIEWS_PREROLL
  TWEET_ENGAGEMENTS

并以某种方式在同一列上使用它们。但不知道该怎么做。

我想使用枚举,因为我需要其他用法在代码中轻松使用它。 e.g:

TwitterObjective.VIDEO_VIEWS_PREROLL

1 个答案:

答案 0 :(得分:1)

据我所知(Django所关注的并不多),为了完成这项工作,你需要在每个字段中使用一个Enum。因此,在您的情况下,我会将Twitter或FB名称放在成员的名称中:

Class Objective(Enum):
    FB_MOBILE_APP_ENGAGEMENT
    FB_MOBILE_APP_DOWNLOAD
    TW_VIDEO_VIEWS_PREROLL
    TW_TWEET_ENGAGEMENTS

如果你真的想使用不同的Enum,你可以选择几个:

  • 使用嵌套的Enum类(请参阅https://stackoverflow.com/a/35886825/208880
  • 使用两个类并让您的实现在它们之间进行选择(这需要在名称中嵌入FaceBook或Twitter代码,例如FB_和TW_,或者在两个Enum中使用唯一的名称,这样您就可以从db转到Python时反转查找)

This answer可能有助于细节。