Django:如何基于外键atribute设置整型字段的最大值?

Django:如何基于外键atribute设置整型字段的最大值?,django,web,django-models,django-forms,django-admin,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 __

我有以下型号:

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

我想根据
Atividade.pontos\u xp\u maximo
设置
pntos\u xp\u ganhos
最大值。我如何才能做到这一点并在管理编辑页面上显示最大值?

有两种方法可以做到这一点

  • 使用自定义验证器
  • 使用内置验证器
  • 自定义验证程序:

    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)]
    
    使用内置验证器:

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

    有两种方法可以做到这一点

  • 使用自定义验证器
  • 使用内置验证器
  • 自定义验证程序:

    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)]
    
    使用内置验证器:

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

    但对于每一种阿维德,我都有不同的pontos_XP_maximo@RonaldoSilveira请举例说明,如果我有一个id=1的Atividade,我会有,比如说,pontos_XP_maximo=30。对于id=2的Atividade,它将是50。@罗纳尔多西韦拉是Atividade,pontos_XP_maximo是预定义的>否,Atividade是一个模型,pontos_XP_maximo是一个字段。所以它们在te数据库中,可能会被修改。但对于每个Atividade,我有一个不同的pontos_XP_maximo@RonaldoSilveira请举例说明,如果我有一个id=1的Atividade,我会有,比如说,pontos_XP_maximo=30。对于id=2的Atividade,它将是50。@罗纳尔多西韦拉是Atividade,pontos_XP_maximo是预定义的>否,Atividade是一个模型,pontos_XP_maximo是一个字段。所以它们在te数据库中,可能会被更改。