gpt4 book ai didi

存储函数或类的 Django 模型字段

转载 作者:行者123 更新时间:2023-12-04 05:39:39 27 4
gpt4 key购买 nike

是否可以创建引用函数或类而不是模型的 Django 自定义模型字段?

如果您想知道我为什么想要这个,这里有一个关于我想要实现的目标的简要说明。

基本上我有一个 FreightTable 模型,用于计算运费的值(value),因此它应该有执行此操作的方法。但问题是有几种不同的计算方式,FreightTable 的每个实例都应该以其特定的方式计算。

起初我想用某种多态性来解决这个问题,但后来我必须为每种不同的算法创建一个特定的模型,而且它们也会在数据库中的不同表中,这对我来说是个问题.我也考虑过使用 Django Polymorphic ,但我听说它并不能很好地扩展,所以这也不是一个好主意。

我的想法是,如果我可以在模型字段上引用这些不同的算法,我就会有一个优雅而高效的解决方案。

最佳答案

My thought is that if I could just reference this different algorithms on a 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))()

关于存储函数或类的 Django 模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com