django - Django:如何根据外键属性设置整数字段最大值?
问题描述
我有以下模型:
class Atividades_cumpridas(models.Model):
id_atividade = models.ForeignKey(Atividade, on_delete=models.CASCADE)
id_jogador = models.ForeignKey(Jogador, on_delete=models.CASCADE)
pontos_xp_ganhos = models.IntegerField()
def __str__(self):
str = self.id_atividade.nome_atividade + ' - ' + self.id_jogador.nome_jogador
return str
我想设置pntos_xp_ganhos
基于的最大值Atividade.pontos_XP_maximo
。我该如何做到这一点并在管理员编辑页面上显示最大值?
解决方案
有两种方法可以做到,
- 使用自定义验证器
- 使用内置验证器
自定义验证器:
from django.core.exceptions import ValidationError
def validate_range(value):
if value > Atividade.pontos_XP_maximo:
raise ValidationError('Max value should be %s' % Atividade.pontos_XP_maximo
)
class Atividades_cumpridas(models.Model):
...
...
pontos_xp_ganhos = models.IntegerField(validators=[validate_range])
使用内置验证器:
MIN = 0
MAX = Atividade.pontos_XP_maximo
from django.core.validators import MinValueValidator, MaxValueValidator
class Atividades_cumpridas(models.Model):
...
...
pontos_xp_ganhos = models.IntegerField(validators=[MinValueValidator(MIN), MaxValueValidator(MAX)]
推荐阅读
- xslt - 将参数传递给 xslt 作为 apache camel 中的节点
- android - OpenGL ES - uv-scroll (GL_REPEAT) 在渲染第二个纹理时停止工作
- sql-server - 在 ROWS BETWEEN 子句的存储过程中使用变量
- python - 多类分类器神经网络问题
- php - laravel 编辑 index.php 后上传 HTTP ERROR 500
- mysql - MySql IN($list) 仅在出现在列表中时才匹配
- javascript - 如何确保在 Laravel 中不会两次加载脚本并向它们添加应用程序版本
- c++ - 由于没有运算符的 CString 连接 (?) 导致的 MemoryException
- javascript - 访问每个承诺中的 URL
- ms-access - 根据表单中的行输入过滤的列标题下拉列表