(Django) Обрезать пробелы в charField

Выполненный 'alsamixer' в терминале и проверке, если основной звук отключен звук.

oo является небесшумным и , мм для бесшумного режима.

<час>

terminal

alsamixer

16
задан Serjik 19 December 2015 в 10:21
поделиться

2 ответа

Должна быть вызвана очистка модели (она не автоматическая), поэтому добавьте self.full_clean() в свой метод сохранения.
http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.full_clean

Что касается вашей формы, вам необходимо вернуть очищенные очищенные данные.

return self.cleaned_data['name'].strip()

Почему-то я думаю, что вы просто пытались сделать кучу вещей, которые не работают. Помните, что формы и модели - это две совершенно разные вещи.

Ознакомьтесь с документами по формам о том, как проверять формы http://docs.djangoproject.com/en/dev/ref/forms/validation/

super(Employee), self.clean().strip() makes no sense at all!

Вот ваш исправленный код:

class Employee(models.Model):
    """(Workers, Staff, etc)"""
    name = models.CharField(blank=True, null=True, max_length=100)

    def save(self, *args, **kwargs):
        self.full_clean() # performs regular validation then clean()
        super(Employee, self).save(*args, **kwargs)


    def clean(self):
        """
        Custom validation (read docs)
        PS: why do you have null=True on charfield? 
        we could avoid the check for name
        """
        if self.name: 
            self.name = self.name.strip()


class EmployeeForm(ModelForm):
    class Meta:
        model = Employee


    def clean_name(self):
        """
        If somebody enters into this form ' hello ', 
        the extra whitespace will be stripped.
        """
        return self.cleaned_data.get('name', '').strip()
11
ответ дан 30 November 2019 в 16:04
поделиться

Я рассматриваю это как декоратор. Я также усекаю значения полей, которые превышают значение max_length CharField.

from django import forms
from django import models
from django.db.models.fields import FieldDoesNotExist
from django.utils.encoding import smart_str

class CleanCharField(forms.CharField):
        """Django's default form handling drives me nuts wrt trailing
        spaces.  http://code.djangoproject.com/attachment/ticket/6362
        """
        def clean(self, value):
            if value is None:
                value = u''
            value = smart_str(value).strip()
            value = super(forms.CharField, self).clean(value)
            return value

def truncate_charfield(model):
    """decorator to truncate CharField data to model field max_length.
    Apply to the clean method in views Form:

    @truncate_charfield(MyModel)
    def clean(self):
        ...
    """
    def wrap(f):
        def wrapped_f(*args):
            f(*args)
            d = args[0].cleaned_data
            for field in model._meta.fields:
                try:
                    mf = model._meta.get_field(field.name)
                    if isinstance(mf, models.CharField) and field.name in d:
                        d[field.name] = d[field.name][:mf.max_length]
                except FieldDoesNotExist:
                    pass
            return d
        return wrapped_f
    return wrap
3
ответ дан 30 November 2019 в 16:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: