Убедитесь, что IntegerField никогда не опускается ниже определенного значения в Django - PullRequest
0 голосов
/ 20 декабря 2011

Я хотел бы убедиться, что целочисленное поле в моей модели никогда не опускается ниже определенного значения, есть ли способ добавить какое-то ограничение в Django?Или мне нужно добавить max() вокруг всех мест, где я проверяю значение?

1 Ответ

3 голосов
/ 20 декабря 2011

Существует два способа:

обновлено

Если вы не используете формы, тогда вы можетеперезаписать метод save () или записать код в сигнале предварительного сохранения:

pre_save.connect(yourModel_pre_save, sender = yourModel ) 

def yourModel_pre_save(sender, instance, **kwargs):
     if instance.some_value > some_other_value: 
         raise ValidationError('Value to high') 

не забудьте включить метод save () в предложение try:

m = yourModel.objects.get( pk = 1 )
try:
    m.save()
except ValidationError, e:
        import itertools
        errors = list( itertools.chain( *e.message_dict.values() ) )

ЕслиВам не нравятся сигналы, затем перезаписать метод сохранения:

class yourModel(model.Model):
    description=models.CharField()
    some_value=models.IntegerField()
    ...

    def save(self, *args, **kwargs):
        if self.some_value > some_other_value: 
             raise ValidationError('Value to high') 
        super(yourModel, self).save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...