Py学习  »  Django

Django-models-访问类中字段的值

DL8 • 5 年前 • 1529 次点击  
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

此代码引发异常:

关了。格式(标记折扣百分比。获取准备值)名称错误:

乌尔格!

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


问题2:我可以把数字限制设置为 IntegerField ? 我只找到了 max_length 这会提示一个警告说“将忽略最大长度”。。。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55311
 
1529 次点击  
文章 [ 2 ]  |  最新文章 5 年前
DL8
Reply   •   1 楼
DL8    5 年前

试图回答问题1:

class Tag(models.Model):
    '''Items have tag will have according discount percentage'''
    tag_discount_percentage = models.IntegerField(default=0)
    slogan = models.CharField(max_length=200, blank=True)

    def __str__(self):
        return self.slogan if self.slogan else self.slogan_default

    @property
    def slogan_default(self):
        return 'Purchase NOW for the extra {}% off!'.format(self.tag_discount_percentage)

呃。。 干杯~

Charnel
Reply   •   2 楼
Charnel    5 年前

回答你的第二个问题-你所说的“数字限制”并不明显。如果您有兴趣防止该值超出定义的范围,则可以使用 validators

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)])

否则,如果要限制小数位数,则应使用 decimal 字段而不是整数。

default agrument可以是一个可调用的,但不需要引用它所用于的对象。你可以考虑使用 pre_save 而是发出信号,根据其他字段“默认”设置字段值。