Я работаю над приложением 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 почти избыточна. Есть ли лучший, чистый способ сохранения этих данных без запроса сервера каждый Добавление нового нажатия кнопки?