python - 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将被忽略'......
解决方案
回答您的第二个问题-“数字限制”的含义并不明显。如果您有兴趣防止该值超出定义的范围,那么您可以使用验证器:
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)])
否则,如果您打算限制小数位数,那么您应该使用小数字段而不是整数。
此外,评论您的第一个问题 - 您根本无法设置与另一个字段的值相关的默认值,因为在保存实例(记录)的那一刻,字段值尚未设置。default
agrument 可以是可调用的,但没有对它所用于的对象的任何引用。您可以考虑使用pre_save信号来“默认”设置字段值,具体取决于其他字段。
推荐阅读
- .net - 如何在 WPF Gridview 的同一列中定义多个控件?
- vb.net - 接受空值的VB.Net函数?
- python - 在 python 中读取一个大文本文件会杀死我的程序
- tensorflow - TF2 Keras - Keras 中的特征工程通过 Tensorflow Serving 保存模型
- python - 如何通过仅使用 Python 和 Selenium 直接上传文件来避免打开文件对话框?
- javascript - Javascript:分配给函数内全局变量的值在函数外变为“未定义”
- ruby-on-rails - rails 如何在服务中使用带有 ERB.new 的助手?
- magento - magento 2 文档 CRUD
- c++ - 用于重新排序无符号整数的 Consexpr 可变参数模板
- java - 使用带有列表的java进行动态排序