Skip to main content
 首页 » 编程设计

python之Django 数据表和枚举

2025年04月02日35kevingrace

我有一个广告系列模型如下:

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 

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

我想使用枚举,因为我需要其他用途以便在代码中轻松使用它。例如:

TwitterObjective.VIDEO_VIEWS_PREROLL 

请您参考如下方法:

据我所知(这与 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可能有助于了解细节。