Django - 翻译和组织枚举类型数据结构的最佳实践

时间:2017-03-26 08:41:44

标签: django

让我们考虑一个模型:

class MobileContact(models.Model):
    contact_type = ....

所以我们必须为移动联系人建模,每个联系人都有类型(如工号,手机号码,电子邮件,传真,寻呼机等)。

首先,我按照以下方式组织了代码:

class ContactType(ChoiceEnum):    
mobile = 1
work = 2 
home = 3    
work_fax = 5
home_fax = 6
email = 7

class MobileContact(models.Model):
    contact_type_id = models.IntegerField(ContactType.choices())

这种方法具有以下代码模式的优点:

contact_values_qs.filter(contact_type_id = ContactType.email.value)

这种模式有利有弊:

优点:

  • 良好的代码可读性(contact_type_id = ContactType.email.valuecontact_type_id = 7
  • 好得多

缺点:

  • 如果我必须在用户界面中看到枚举值,我没有字符串表示,更不用说无法翻译这些字符串

所以我以标准方式重写了代码:

class MobileContact(models.Model):
    contact_type = models.ForeignKey(ContactType, ...)

class ContactType(models.Model):
    type_name = CharField(...)

THE QUESITON:

  1. 如何翻译type_name的值?我遇到this post,但最新支持的python版本是3.4。我的项目部署了3.5

  2. 如何在选择contact_types时构建代码以维护代码可读性。

  3. 例如,我想选择workwork_fax。我知道这样做的唯一方法是:

    contact_types = ContactTypes.objects.filter(id__in = [2,5])
    x = MobileContact.objects.filter(contact_type__in = contact_types)
    

    ...但我认为这部分id__in = [2,5]的可读性非常差。

    对此有何帮助?

0 个答案:

没有答案