【发布时间】:2021-10-26 11:43:00
【问题描述】:
这里我有一个具有多个同名输入值的表单。我想根据以下模板设计批量创建对象。
我认为如果列表之一不相等,当前压缩列表的方法将无法正常工作。
什么是更好的方法?前面部分应该是我贴的这样你可以查看代码sn-p
<script>
$(document).on("click", ".q-name", function () {
$(this).closest(".untitled").hide();
$(this).siblings('.q-title').prop('hidden', false);
});
</script>
<script>
$(document).on("click", ".addOption", function () {
option = `<div class="item">
<div>
<input
class="form-control"
type="text"
name="title"
placeholder="Enter title"
/>
</div>
<div>
<select name="type" class="form-control">
Select
<option disabled>Select</option>
<option value="1">Option1</option>
<option value="2">Option2</option>
</select>
</div>`;
$(this).closest(".options").prepend(option);
});
$(document).on("click", ".newOptionGroup", function () {
group = `<input type="text" name="q_title" placeholder="model A field" class="form-control q-title"/></div>
<p>Options of that model (Another model fields)</p>
<div class="options">
<div class="item">
<div>
<input
class="form-control"
type="text"
name="title"
placeholder="Enter title"/>
</div>
<div>
<select name="type" class="form-control">
Select
<option disabled>Select</option>
<option value="1">Option1</option>
<option value="2">Option2</option>
</select>
</div>
</div>
<div class="last">
<button type="button" class="btn btn-icon-only addOption">
Add more
</button>
<div>
<div class="custom-control custom-switch">
<input
name="is_document"
type="checkbox"
class="custom-control-input"
id="customSwitche"
value="1"
/>
<label class="custom-control-label" for="customSwitche"
>Is File</label
>
</div>
</div>
<div></div>
</div>
</div>
</div>
<div class="option-group-new newOptionGroup">
<button> Add New group</button>
</div>
</div>
<div class="text-right mt-4">
<button type="submit" class="btn btn-outline-grey">Submit</button>
</div>`;
$(".group-form").append(group);
});
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="group-form" method="post">
<input
type="text"
name="q_title"
class="form-control q-title"
placeholder="model A field name"
/>
<p>Options of that model (Another model fields)</p>
</div>
<div class="options">
<div class="item">
<div>
<input
class="form-control"
type="text"
name="title"
placeholder="Enter title"
/>
</div>
<div>
<select name="type" class="form-control">
Select
<option disabled>Select</option>
<option value="1">Option1</option>
<option value="2">Option2</option>
</select>
</div>
</div>
<div class="last">
<button type="button" class="btn btn-icon-only addOption">
Add more
</button>
<div>
<div class="custom-control custom-switch">
<input
name="is_document"
type="checkbox"
class="custom-control-input"
id="customSwitche"
value="1"
/>
<label class="custom-control-label" for="customSwitche"
>Is File</label
>
</div>
</div>
<div></div>
</div>
</div>
</div>
<div class="option-group-new newOptionGroup">
<button type="button"> New group</button>
</div>
</div>
<div class="text-right mt-4">
<button type="submit" class="btn btn-outline-grey">Submit</button>
</div>
</form>
</div>
Django 视图
ques = Question.objects.get(id=kwargs["q_id"])
q_title = request.POST.getlist("q_title")
title = request.POST.getlist("title")
types = request.POST.getlist("stype")
is_file = request.POST.getlist("is_file", [0])
params = zip(q_title, is_file, title, types)
for p in params:
q = Question.objects.create(
title=p[0],
is_file=p[1],
)
Option.objects.create(title=p[2], field_type=p[3], question=q)
编辑:
问题标题和选项标题将不相等,因为问题可以有无限的选项。
例如:
questions = ['q1', 'q2']
options = ['q1_option1', 'q1_option2', 'q2_option1', 'q2_option2', 'q2_option3']
我无法跟踪哪个选项属于特定问题。
EDIT2:
ques_titles = ['q1-title', 'q2_title']
is_file = [True, False]
# ques_titles and is_file will be equal.
option_titles = ['q1_option1', 'q1_option2', 'q2-option1', 'q2-option2', 'q3-option3']
types = ['option1_type', 'option2_type', 'option3-type', 'option4-type', 'option5-type3']
#option_titles and types list will be equal
尝试1:
在将问题 fk 分配给选项时尝试进行此尝试,只分配一个问题而不是相应的问题。
questions = [Question(title=param[0], is_file=param[1]) for param in ques_params]
ques_objs = Question.objects.bulk_create(questions)
optn_params = zip(optn_title, types)
options = []
for q in ques_objs:
print(q)
options.append([Option(title=param[0], field_type=param[1], question=q) for param in optn_params])
Option.objects.bulk_create(options[0])s)
【问题讨论】:
标签: python jquery django django-views django-templates