Skip to main content
 首页 » 编程设计

python之Django 和单位转换

2025年05月04日25webabcd

我需要在数据库中存储一些值,距离,重量等。
在我的模型中,我有一个包含某些东西的数量的字段和带有选择选项的 IntegerField,它决定了这个数量的含义(长度、持续时间等)。

我应该为单位和物理量创建模型还是应该使用包含单位类型的 IntegerField?

请您参考如下方法:

field(enum)"是指您在字段上使用 choices 选项吗?

一组简单的选择对于小型转化列表来说效果相当好。它允许您做出简化的假设,帮助您的用户(和您)获得有用的东西。

只有在以下情况下才能为单元创建正式模型:(a) 涉及很多单元,(b) 您需要扩展它,并且 (c) 有一些合理的期望,即数据库查找将包含一些值(value)。

单位不会经常改变。似乎没有理由为此使用数据库。对选项列表进行硬编码似乎要简单得多。

选择

例如,您可以使用类似的东西来跟踪转化情况。

UNIT_CHOICES = ( ('m', 'meters'), ('f', 'feet' ), ('i', 'inches'), ('pt', 'points') ) 
 
unit_conversions = { 
    ('m','f'): 3.xyz, 
    ('m','i'): 39.xyz, 
    ('m','pt'): 29.xyz*72, 
    ('f','m'): 1/3.xyz, 
    ('f','i'): 12.0, 
    ('f','pt'): 12.0*72, 
    etc. 
} 

鉴于此映射,您可以在转换方法中获得转换因子 函数,进行数学计算,并返回转换后的单位。

class WithUnit( Model ): 
    ... 
    def toUnit( self, someUnit ): 
        if someUnit == self.unit: return self.value 
        elif (someUnit,self.unit) in unit_conversions: 
            return self.value * unit_conversions[(someUnit,self.unit)] 
        else: 
            raise Exception( "Can't convert" ) 

模型。

如果要为单位创建正式模型,则必须随身携带尺寸类型(长度、体积、质量、重量/力、压力、温度等)和各种单位换算系数。这适用于除温度以外的所有事物,温度除了一个因子外还有一个常数项。

您必须选择一组“基线”单位(例如 MKS )并在各个单位之间携带所有乘数。

您还必须选择要加载到您的表格中的英制单位数量(液体盎司、茶匙、汤匙、杯子、品脱、夸脱等)