В моем тренировочном проекте на django есть страница с следующим сценарием:
Форма для добавления типа изделия (модель Type_of_product, поля формы model, department_id), плюс кнопка, которая добавляет произвольное количество форм для описания возможных характеристик изделия(модель Characteristic_of_product, поля формы label, units, description).
Предполагается, что при нажатии "Сохранить", в модели Type_of_product создается запись, и на основе ее ключа произвольное количество записей в Characteristic_of_product
Модели:
class Type_of_product(models.Model):
model = models.CharField(max_length=255)
department_id = models.ForeignKey('Department', on_delete=models.DO_NOTHING)
class Characteristic_of_product(models.Model):
label = models.CharField(max_length=255)
type_of_product_id = models.ForeignKey('Type_of_product', on_delete=models.DO_NOTHING)
units = models.CharField(max_length=255)
description = models.TextField()
Вьюшки:
def type_product_add_form(request):
if request.method == 'POST':
form = TypeProductAdd(request.POST)
department_id_v = request.POST.get("department")
if form.is_valid():
add_type = Type_of_product.objects.create(model=form.cleaned_data['label'],
department_id_id=department_id_v)
add_type.save()
request.session['Type_of_product_id'] = add_type.id
else:
form = TypeProductAdd()
return render(request, 'type_product_add_from.html', {'form': form})
def characteristics_of_product_add_form(request):
if request.method == 'POST':
form = CharacteristicAdd(request.POST)
type_of_product_id = request.session.get("Type_of_product_id")
if form.is_valid():
add_char = Characteristic_of_product.objects.create(label=form.cleaned_data['label'], type_of_product_id_id=type_of_product_id, units=form.cleaned_data['units'], description=form.cleaned_data['description'])
add_char.save()
return redirect(type_product_add_form)
else:
form = CharacteristicAdd()
return render(request, 'characteristics_of_product_add_form.html', {'form': form})
код страницы добавления изделия:
{% extends "base.html" %}
{% block content %}
<h1>Форма добавления нового типа изделия</h1>
<form id="type_product_add" method="post">
{% csrf_token %}
<table>
{{ form }}
</table>
</form>
<div id="content"></div>
<input class="btn btn-default" id="btn_add" type="button" value="Добавить характеристику">
<script>
$(document).ready(function(){
$('#btn_add').click(function(){
$.ajax({
type: "GET",
url: "char/",
cache: false,
success: function(html){
$("#content").append(html);
}
});
});
$('#btn_submit').click(function(){
var type_product = document.getElementById('type_product_add');
var content = document.getElementById('content');
var elements = content.querySelectorAll('form');
type_product.submit();
console.log(type_product);
for (var i = 0; i < elements.length; i++) {
var f = elements[i];
f.submit();
console.log(f);
}
});
});
</script>
<input id="btn_submit" class="btn btn-default" type="submit" value="Сохранить">
{% endblock %}
код формы характеристики:
<form action="{% url 'characteristics_of_product_add_form' %}" method="post">
{% csrf_token %}
<table>
{{ form }}
</table>
</form>
Данное исполнение приводит к тому, что формы обрабатываются в неправильном порядке и по этому страница либо вылетает с ошибкой либо записывает ID типа изделия от предыдущей сессии. Подскажите, пожалуйста, как заставить обрабатываться формы в нужном мне порядке. Подозреваю кейс довольно стандартный, но к сожалению это ближайшее решения, которое я смог реализовать. Возможно есть принципиально другое решения задачи.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ПроблемаЕсть сайт с кучей разных html, в каждой jq скрипты, на главной странице просто ссылки на другие страницы, в общем полный адъ