Динамическое расширение полей формы в Django - PullRequest
0 голосов
/ 23 января 2020

Я работаю над приложением CRUD для изучения языка, в котором пользователь может создавать свои слова и переводы. Имея следующую модель:

class StudyModule(models.Model):
    NAME = models.CharField(unique=True, max_length=100, primary_key=True)
    words = JSONField(default=dict)  # 'word' : 'translation'

и форму:

class AddModule(Form):
    name = forms.CharField()
    word = forms.CharField()
    translation = forms.CharField()

Я хочу динамически развернуть поля word и * * * * * * без перевода страницы , Я уже достиг этого, с некоторыми JS и путем реализации представлений таким образом:

def create_module(request):
    if request.method == 'POST':
        form = AddModule(request.POST)
        if form.is_valid():
            name = request.POST.get('name')
            words = request.POST.getlist('words')
            translations = request.POST.getlist('translations')
            word_data = {word: translation for word, translation in zip(words, translations)}
            module = StudyModule.objects.create(NAME=name, words=word_data)
            module.save()
    else:
        form = AddModule()
    return render(request, 'teacher/create_module.html', {'form': form})

HTML:

<form method="post" class="module-form">
     {% csrf_token %}
     <div class="clone-box">
         <div class="cloned-element">
              {{ form.as_p }}
         </div>
     </div>
     <input type="submit"
            value="Save"
            name="save-word"
            class="submit-button">
     <button type="button" class="clone-form-button">Add new</button> 
<!-- JS clones only word and translation input, without requesting server -->
</form>

В моем решении инициализация экземпляра AddModule почти избыточна. Есть ли лучший, чистый способ сохранения этих данных без запроса сервера каждый Добавление нового нажатия кнопки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...