关于python:Django datatable和enum

Django datatable and enum

我的竞选模式如下:

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

模型:

1
2
3
4
5
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活动。

目标字段是一个自由文本,但我对此不满意。

我想创建两个不同的枚举(Enum34):

1
2
3
4
5
6
7
class FacebookObjective(Enum):
  MOBILE_APP_ENGAGEMENT
  MOBILE_APP_DOWNLOAD

class TwitterObjective(Enum):
  VIDEO_VIEWS_PREROLL
  TWEET_ENGAGEMENTS

在同一列中使用它们。但不知道怎么做。

我想使用枚举,因为我需要在代码中使用它。例如:

1
TwitterObjective.VIDEO_VIEWS_PREROLL


据我所知(Django不太关心),要实现这一点,您需要在每个字段使用一个Enum。所以在你的情况下,我会把twitter或fb的名称放在会员的名字里:

1
2
3
4
5
Class Objective(Enum):
    FB_MOBILE_APP_ENGAGEMENT
    FB_MOBILE_APP_DOWNLOAD
    TW_VIDEO_VIEWS_PREROLL
    TW_TWEET_ENGAGEMENTS

如果您真的想使用不同的Enums,您有几个选择:

  • 使用嵌套的Enum类(参见https://stackoverflow.com/a/35886825/208880)
  • 使用两个类并让您的实现在它们之间进行选择(这需要在名称中嵌入facebook或twitter代码,例如fb_u和tw_u,或者在两个Enum中使用唯一的名称,这样在从db到python时可以反向查找)。
  • 小精灵

    这个答案可能对细节有所帮助。