Как получить данные со всех форм на странице django
Пользователь вводит данные в специальную форму. По нажатию на кнопку "Добавить форму" форма клонируется. При отправке сохраняются данные только с оригинальной (не клонированной) формы.
<h2 class="px-5 mb-3 mt-2">Добавить изделие</h2>
<div class="field inline specially">
<form method="post" action="/product" class="px-5 oldForm was-validated" autocomplete="off">
{% csrf_token %}
<div class="forma">
<div id="cloneArea" rebest="yes">
{# <input type="text" name="secret" placeholder="Secret Key">#}
<div class="row">
<div class="input-group mb-3 col">
<label class="input-group-text product_surname" for="product_surname">Фамилия</label>
<input list="surnames" id="product_surname" name="surname" class="form-select"
required/>
<datalist id="surnames">
{% for surname in persName %}
<option>{{ surname.surname }}</option>
{% endfor %}
</datalist>
</div>
<div class="input-group mb-3 col">
<label class="input-group-text" for="product_point">Участок</label>
<input list="points" style="width: auto" name="point" class="form-select"
id="product_point" required>
<datalist id="points">
{% for points in pointName %}
<option>{{ points.point_name }}</option>
{% endfor %}
</datalist>
</div>
</div>
<div class="row">
<div class="input-group mb-3 col">
<label class="input-group-text" for="product_name">Изделие</label>
<input list="product" style="width: auto" name="production" class="form-select"
id="product_name" required>
<datalist id="product">
{% for product in prodName %}
<option>{{ product.product_name }}</option>
{% endfor %}
</datalist>
</div>
<div class="input-group mb-3 col">
<label class="input-group-text" for="product_color">Цвет</label>
<input list="color" style="width: auto" name="color" class="form-select"
id="product_color"
required>
<datalist id="color">
{% for color in colorName %}
<option>{{ color.color_name }}</option>
{% endfor %}
</datalist>
</div>
</div>
<div class="row">
<div class="input-group mb-3 col">
<span class="input-group-text" id="basic-addon1">Количество</span>
<input type="number" min="1" value="1" step="1" style="width: 50px" name="amount"
data-val="1"
class="form-control" id="product_amount">
</div>
<div class="input-group mb-3 col">
<span class="input-group-text" id="basic-addon1">Дата: </span>
<input type="date" name="date" class="form-control product_date" id="product_date"
data-val="1"
placeholder="Дата" required>
</div>
</div>
<div class="input-group mb-3">
<label class="input-group-text" for="inputGroupSelect01">Приход или уход:</label>
<select style="width: auto" name="trtype" class="form-select" id="product_in_out" data-val="1">
{% for type in transaction %}
<option value={{ type.id }}>{{ type.trtype }}</option>
{% endfor %}
</select>
</div>
<hr width="100%" size="5">
</div>
</div>
<div class="row mb-3" style="display: flex; justify-content: space-between;">
<div class="col">
<input type="button" id="addField" class="btn btn-outline-dark add"
value="Добавить поле">
</div>
<div class="col">
<input type="submit" class="btn btn-success" style="float: right" id="addToTable"
value="Добавить данные в таблицу"/>
</div>
</div>
</form>
</div>
<script>
$(document).ready(function () {
$("#addField").click(function () { //
const links = $("[rebest='yes']").length; //кол-во элементов с req='true'
$("#cloneArea").clone().attr('id', 'cloneArea' + links).appendTo(".forma");
});
});
</script>
Введенная информация сохраняется в таблицу. Как мне можно получить данные с клонированной формы?
views.py
def product(request):
if request.method == 'GET':
return render(request, 'product.html', {
'persName': Persons.objects.all(),
'pointName': Points.objects.all(),
'prodName': Product.objects.all(),
'materialsName': Materials.objects.all(),
'colorName': Color.objects.all(),
'unitName': Unit.objects.all(),
'transaction': TranType.objects.all()
})
else:
# form1 = cloneArea(request.POST, )
surname = Persons.objects.get(surname=(request.POST['surname']))
point = Points.objects.get(point_name=(request.POST['point']))
production = Product.objects.get(product_name=(request.POST['production']))
prod_id = production.id
color = Color.objects.get(color_name=(request.POST['color']))
amount = int(request.POST['amount'])
amount_prod_gen = int(amount)
date = request.POST['date']
pr_pack = Product.objects.filter(pk=prod_id).values_list('product_packaging', flat=True).first()
pr_cost = Product.objects.filter(pk=prod_id).values_list('product_cost', flat=True).first()
pr_spec = Product.objects.filter(pk=prod_id).values_list('product_specification', flat=True).all()
trtype = TranType.objects.get(pk=(request.POST['trtype']))
prod_id=int(key))
if trtype.id == 1:
if GeneralProduct.objects.filter(product_gen=production, points_prod=point, colors_prod=color).exists():
general_old_delete_id = GeneralProduct.objects.get(product_gen=production, points_prod=point,
colors_prod=color).id
old_amount = int(GeneralProduct.objects.filter(pk=general_old_delete_id).values_list('amount_prod',
flat=True).first())
# print(old_amount)
general_old_delete = GeneralProduct.objects.get(id=general_old_delete_id)
general_old_delete.delete()
amount_prod_gen = amount + old_amount
GeneralProduct(
product_gen=production,
points_prod=point,
colors_prod=color,
amount_prod=amount_prod_gen,
).save()
ProductTotal(
surnames=surname,
points=point,
products=production,
colors=color,
amount=amount,
date=date,
products_packaging=pr_pack,
products_cost=pr_cost,
products_specification=pr_spec,
trans_type=trtype
).save()
else:
GeneralProduct(
product_gen=production,
points_prod=point,
colors_prod=color,
amount_prod=amount_prod_gen,
).save()
ProductTotal(
surnames=surname,
points=point,
products=production,
colors=color,
amount=amount,
date=date,
products_packaging=pr_pack,
products_cost=pr_cost,
products_specification=pr_spec,
trans_type=trtype
).save()
elif trtype.id == 2:
if GeneralProduct.objects.filter(product_gen=production, points_prod=point, colors_prod=color).exists():
general_old_delete_id = GeneralProduct.objects.get(product_gen=production, points_prod=point,
colors_prod=color).id
old_amount = int(GeneralProduct.objects.filter(pk=general_old_delete_id).values_list('amount_prod',
flat=True).first())
# print(old_amount)
general_old_delete = GeneralProduct.objects.get(id=general_old_delete_id)
general_old_delete.delete()
amount_prod_gen = old_amount - amount
GeneralProduct(
product_gen=production,
points_prod=point,
colors_prod=color,
amount_prod=amount_prod_gen,
).save()
models.py
class ProductTotal(models.Model):
surnames = models.ForeignKey(Persons, on_delete=models.CASCADE)
points = models.ForeignKey(Points, on_delete=models.CASCADE)
products = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='pr')
products_packaging = models.IntegerField(blank=False, default=0)
products_cost = models.IntegerField(blank=False, default=0)
products_specification = models.TextField()
colors = models.ForeignKey(Color, on_delete=models.CASCADE)
amount = models.IntegerField()
date = models.DateField()
spec = models.ManyToManyField(Materials)
trans_type = models.ForeignKey(TranType, on_delete=models.CASCADE)