Почему в моем Django пользовательском поле формы to_ python () не работает? - PullRequest
1 голос
/ 21 февраля 2020

Совершенно новый для Django, и я уже немного борюсь с этой проблемой.

Я пытаюсь создать настраиваемое поле формы, которое наследуется от CharField. Я хочу, чтобы он обрабатывал ввод из формы, чтобы двойные пробелы в строках заменялись одиночными пробелами. Тем не менее, кажется, что пользовательская форма to_ python () никогда не вызывается, потому что всякий раз, когда я вводю в форму что-то вроде 'a a', двойные пробелы все равно попадают в базу данных. Я также заметил, что ввод правильно разделен, как будто CharField.to_ python все еще вызывается.

Насколько я понимаю, to_ python () вызывается всякий раз, когда вызывается form.is_valid () , Я не уверен, правильно ли я это сделал в представлении формы.

Вот пользовательское поле:

class NameField(forms.CharField):

    def to_python(self, value):
        """ Remove extra spaces in input. """

        if value not in self.empty_values:
            value = str(value)

            if self.strip:
                value = value.strip()

            if '  ' in value:
                value = value.replace('  ', ' ')

        if value in self.empty_values:
            return self.empty_value

        return value

Форма:

class ProductForm(forms.Form):

    name = NameField()
    quantity = forms.IntegerField(validators=[MinValueValidator(0)])
    cost = forms.DecimalField(
        max_digits=5,
        decimal_places=2,
        validators=[MinValueValidator(0.0)],
    )
    _quality = models.DecimalField(
        blank=True,
        default=0.0,
        max_digits=2,
        decimal_places=1,
        validators=[MinValueValidator(0.0), MaxValueValidator(5.0)]
    )

И мнение:

def form(request):

    product_form_set = modelformset_factory(
        Product,
        fields=('name', 'quantity', 'cost')
    )

    if request.method == 'POST':
        formset = product_form_set(request.POST, request.FILES)

        if formset.is_valid():
            formset.save()

    else:
        formset = product_form_set()

    return render(request, 'synergy/form.html', {'formset': formset})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...