Обработка нескольких пользовательских вводов в поле пользовательской формы Django: Обработка всех значений

Я работаю над созданием пользовательского поля формы в Django, где пользователи могут динамически вводить несколько текстовых значений на фронтенде. Однако я столкнулся с проблемой, когда в методе to_python поля обрабатывается только последнее введенное текстовое значение, хотя я могу видеть все введенные значения в методах Request.POST.

пользовательское поле с несколькими текстовыми значениями

Вот упрощенная версия моего кода:

#fields.py
class MultiCharField(forms.Field):
    widget = Mywidget

    def __init__(self, *args, **kwargs):
        super(MultiCharField, self).__init__(*args, **kwargs)     
    
    def to_python(self, value):
        print("value: " + str(value)) # it only prints the last text input
        return value if isinstance(value, list) else [value]
<!-- mywidget.html -->
<div class="choice">
        <input type="text" class="form-control" id="id-{{ widget.name }}" name="{{ widget.name }}"
        {% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %} />
        <a href="#" class="add-field">Add Another</a>
</div>
<script>
    $( ".add-field" ).on( "click", function() {
        $('<div class="choice"><input type="text" name="{{ widget.name }}" /><a href="#" class="remove-field">Remove</a></div>').insertAfter($(this).parent());
        $('.remove-field').on('click', function() {
            $(this).parent().remove();
    });
    });
</script>
#forms.py
class QuestionModelForm(forms.ModelForm):
    options = MultiCharField()

    class Meta:
        model = Question
class Mywidget(forms.Widget):
    template_name = 'mywidget.html'

    def get_context(self, name, value, attrs=None):
        return {'widget': {
            'name': name,
            'value': value,
        }}

    def render(self, name, value, attrs=None, renderer=None):
        context = self.get_context(name, value, attrs)
        template = loader.get_template(self.template_name).render(context)
        return mark_safe(template)

Я стремлюсь захватить все текстовые вводы, введенные пользователем в мое пользовательское поле, а не только последний. Метод Request.POST правильно отображает все значения, но я не могу правильно обработать их в методе to_python моего пользовательского поля. Как я могу обработать все текстовые данные, введенные пользователем в мое пользовательское поле?

Я успешно решил проблему, обратившись к документации Django, в которой говорится, что метод value_from_datadict отвечает за возврат значения виджета. Поэтому я счел необходимым переопределить этот метод в моем пользовательском виджете.

def value_from_datadict(self, data, files, name):
    return data.getlist(name, None)
Вернуться на верх