是否可以创建引用函数或类而不是模型的Django自定义模型字段?
如果您想知道为什么我要这样做,这里简要说明一下我要达到的目标。
基本上我有一个FreightTable模型,该模型用于计算货运的价值,因此它应该具有执行此操作的方法。但是问题在于,有几种不同的计算方法,而FreightTable的每个实例都应按照其特定方法进行计算。
最初,我考虑过使用某种多态性来解决这个问题,但是后来我不得不为每种不同的算法创建一个特定的模型,而且它们也将位于数据库的不同表中,这对我来说是个问题。我还考虑过使用Django Polymorphic,但是我听说它的伸缩性不是很好,所以也不是一个好主意。
我的想法是,如果我可以仅在Model Field上引用这种不同的算法,那么我将拥有一个优雅而高效的解决方案。
我的想法是,如果我能在Model Field上引用不同的算法
这是一个好主意,例如:
CALCULATION_TYPES = [(1, 'Normal'), (2, 'Express')]
class FreightTable(models.Model):
# Normal fields
calculation_type = models.IntegerField(choices=CALCULATION_TYPES)
def calc_normal(self):
pass
def calc_express(self):
pass
def calc_default(self):
pass
现在,对于每种货运类型,您都可以设置计算方法:
ft = FreightType(calculation_type=2)
ft.save()
在要显示计算结果的位置,从实例中获取方法,然后调用适当的方法:
call_map = {1: 'calc_normal', 2: 'calc_express'}
ft = FreightTable.objects.get(pk=1)
calculated_value = getattr(ft, call_map(ft.calculation_type))()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句