建立模型类的方法学习 DecimalField ,models.SmallIntegerField ,get_pay_type_display()

发布时间 2023-07-25 10:09:23作者: ranbo145

1. 

total_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="订单总价", default=0)

DecimalField: 这是一个Django模型字段类型,用于存储十进制数值,通常用于表示货币和其他需要高精度计算的数值

max_digits=10: 这是DecimalField中的一个参数,用于指定该字段能够存储的最大位数(包括整数位和小数位)。在这个例子中,最大位数被限制为10位

decimal_places=2: 这是DecimalField中的另一个参数,用于指定小数点后的位数。在这个例子中,小数点后有2位

总之,这个字段 total_amount 是一个能够存储最大10位数、小数点后有2位数的十进制数字段,用于表示订单的总价

2. 

pay_choices = (
    (1, '支付宝'),
    (2, '微信支付'),
)
pay_type = models.SmallIntegerField(choices=pay_choices, default=0, verbose_name="支付方式")

 

models.SmallIntegerField: 这是一个Django模型字段类型,用于存储较小的整数。

choices=pay_choices: 这是SmallIntegerField的一个参数,用于指定该字段可接受的选项。我们将pay_choices作为选项提供给这个字段,这意味着订单的支付方式只能是"支付宝"或"微信支付"。

3. 

def pay(self):
    return self.get_pay_type_display()

 self: 这是指向订单模型实例的引用。在实例方法中,第一个参数通常是self,它代表当前调用该方法的订单实例本身。

get_pay_type_display(): 这是Django模型中的一个内置方法。对于pay_type 这样的choices字段,Django为每个字段自动生成一个get_字段名  _display() 方法,其中 字段名 是指实际数据库中存储选择值的字段名。在这个例子中,我们有一个pay_type字段,它的选项由 pay_choices 定义。所以Django为它自动创建了get_pay_type_display()方法。

return: 这个方法的返回值是通过调用 get_pay_type_display() 方法获得的支付方式的可读标签。也就是说,这个方法返回订单实例的支付方式对应的可读标签

这个方法的作用是为了方便在代码中获取订单实例的支付方式对应的可读标签,而不必直接访问 pay_type 字段的值。通过调用 self.get_pay_type_display() 方法,你可以获得订单实例的支付方式的可读标签,从而在模板或其他代码中直接使用该标签来展示支付方式,而不需要手动解析 pay_choices 元组