Django:通过动态条件获取模型名称

时间:2014-06-29 19:37:15

标签: python django

我有世界各地/各大洲分开的桌子,以避免主要的钥匙冲突。我的模型名称为Customer"<RegionName>",其中RegionName类似于北美NA,大洋洲OCE,欧洲EU,亚洲ASIASEA为东南亚等,

在我看来,我需要根据网址中指定的区域使用正确的模型。我的网址结构为/fetch/customer/{region}/{customerName}。如何根据{region}参数给出的内容获得正确的模型?我知道我可以做一堆if else条件,但在处理多个区域时这似乎相当愚蠢。

如果有可能的方式我可以有基本字符串Customer并附加region吗?如果给定的区域为NA,我们的字符串将为Customer + NA = CustomerNA。如何获取此CustomerNA字符串并获取名为CustomerNA的实际Model类?

不确定这是否有点令人困惑。请告诉我是否很难理解。它本来可能听起来好一些,在翻译中迷失了。

1 个答案:

答案 0 :(得分:3)

一种方法是:

CUSTOMER_MODELS = {
    'NA': CustomerNA,
    'EU': CustomerEU,
    'Asia': CustomerAsia,
    #...
}

并消费它,

model = CUSTOMER_MODELS.get(region)

如果您可以重新访问您的模型,我建议您确保更简单(您知道业务要求) - 示例

class Customer:
    ...
    region = models.CharField(choices=(('NA', 'NA'), ('Asia', 'Asia'), ))

然后你可以废除所有复杂的逻辑