Ограничения Django CharField - PullRequest
1 голос
/ 29 июля 2009

как я могу указать черный список для CharField. Однако я хочу, чтобы черный список был эффективен и в админ-панели Django ... иначе я бы просто проверил его в представлении.

Под черным списком я подразумеваю значения, которые нельзя использовать. Я также установил уникальное значение, но я бы тоже хотел отключить несколько строк.

Спасибо, Max

Ответы [ 3 ]

1 голос
/ 29 июля 2009

Я бы переопределил метод save () модели и значение для вставки в черный список перед вызовом метода save () родительского класса.

Что-то в этом роде (упрощенно):

class BlackListModel(models.Model):   
   blacklist = ['a', 'b', 'c']

   # your model fields definitions...

   def save(self, *args, **kwargs):
        if self.blacklist_field in self.blacklist:
            raise Exception("Attempting to save a blacklisted value!")
        return super(BlackListModel, self).save(*args, **kwargs)

Таким образом, он работает во всех ваших приложениях.

0 голосов
/ 19 декабря 2018

Поскольку мы несколько лет спустя, вам следует написать собственный валидатор черного списка:

from django.db import models    
from django.core.exceptions import ValidationError

def validate_blacklist(value):
    if value in ['a', 'b', 'c']:
        raise ValidationError(
            "'a', 'b' and 'c' are prohibited!",
            params={'value': value},
        )

class MyModel(models.Model):
    even_field = models.CharField(max_length=200, validators=[validate_even])

См. Валидаторы Джанго для полной документации.

0 голосов
/ 29 июля 2009

Это невозможно из коробки. Вам потребуется написать настраиваемое поле формы или иначе добавить настраиваемую обработку администратора , чтобы выполнить проверку на уровне администратора. Я подозреваю, что для этого на уровне базы данных вам потребуется установить какой-то триггер и хранимую процедуру, но это не моя область, поэтому я оставлю это другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...