Доступ к содержанию CharField перед чисткой - PullRequest
0 голосов
/ 11 марта 2019

У меня есть пользовательское поле django, основанное на django CharField (django versoon = 1.6):

class MyHTMLField(forms.CharField):
    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = kwargs.get('max_length', settings.MAX_MYHTML_SIZE)
        super(MyHTMLField, self).__init__(*args, **kwargs)

И вот как я использую его в функции API для проверки ввода:

 validation_field = MyHTMLField()
 try:
     validation_field.clean(html_content)
 except forms.ValidationError:
     errors = validation_field.errors

Проблема заключается в следующем: max_length depends содержимого строки html_content, поскольку существует несколько типов содержимого, и у нас есть различные ограничения по длине.Итак, у нас есть функция (упрощенная) для получения типа контента:

def get_content_type(html_content):
   return 1 if "sign" in html_content else 0

До этого времени мы использовали эту функцию только после проверки MyHTMLField.И теперь мне нужно определить тип содержимого перед запуском метода MyHTMLField.clean(), чтобы динамически передавать ему правильный max_size, а не только из константы настроек.

Но есть ли способ проанализировать неподтвержденный контент перед запуском метода .clean ()?Я знаю, что MyHTMLField.clean() будет запускать функцию django `run_validators", и пока единственной валидатором является проверка длины. Но, может быть, есть некоторые скрытые дополнительные проверки безопасности вводимого текста?

...