让我们考虑一个模型:
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.value
比contact_type_id = 7
)缺点:
所以我以标准方式重写了代码:
class MobileContact(models.Model):
contact_type = models.ForeignKey(ContactType, ...)
class ContactType(models.Model):
type_name = CharField(...)
THE QUESITON:
如何翻译type_name
的值?我遇到this post,但最新支持的python版本是3.4。我的项目部署了3.5
如何在选择contact_types
时构建代码以维护代码可读性。
例如,我想选择work
和work_fax
。我知道这样做的唯一方法是:
contact_types = ContactTypes.objects.filter(id__in = [2,5])
x = MobileContact.objects.filter(contact_type__in = contact_types)
...但我认为这部分id__in = [2,5]
的可读性非常差。
对此有何帮助?