首页 > 解决方案 > Django - 模型 - 访问类中字段的值

问题描述

class Tag(models.Model):
    '''Items have tag will have according discount percentage'''

    tag_discount_percentage = models.IntegerField()

    slogan_default = 'Purchase NOW for extra {}% off!'.format(tag_discount_percentage.get_prep_value(value))

    slogan = models.CharField(max_length=200, default=slogan_default)

    def __str__(self):
        return self.slogan

此代码引发异常:

slogan_default = '立即购买以获得额外的 {}% 折扣!'.format(tag_discount_percentage.get_prep_value(value)) NameError: name 'value' is not defined

急!

问题 1:如何在该类中访问字段自己的值?还是有更好的方法来设置 CharField 的默认值?

tag_discount_percentage本身是<django.db.models.fields.IntegerField>,但我想要的价值


问题 2:我可以设置数字限制IntegerField吗?我发现的只是max_length提示警告说'max_length将被忽略'......

标签: pythondjangomodelfield

解决方案


回答您的第二个问题-“数字限制”的含义并不明显。如果您有兴趣防止该值超出定义的范围,那么您可以使用验证器

from django.core.validators import MaxValueValidator, MinValueValidator

class Tag(models.Model):
    '''Items have tag will have according discount percentage'''
    tag_discount_percentage = models.IntegerField(default=0, validators=[MinValueValidator(1), MaxValueValidator(100)])

否则,如果您打算限制小数位数,那么您应该使用小数字段而不是整数。

此外,评论您的第一个问题 - 您根本无法设置与另一个字段的值相关的默认值,因为在保存实例(记录)的那一刻,字段值尚未设置。defaultagrument 可以是可调用的,但没有对它所用于的对象的任何引用。您可以考虑使用pre_save信号来“默认”设置字段值,具体取决于其他字段。


推荐阅读