Django:如何根据外键属性设置整数字段最大值?

时间:2018-04-24 14:26:36

标签: django web django-models django-forms django-admin

我有以下型号:

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最大值。我该怎么做并在管理编辑页面上显示最大值?

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到,

  1. 使用自定义验证器
  2. 使用内置验证器
  3. 自定义验证器:

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