Совершенно новый для 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})