Django视图运行缓慢
我在我的Django项目中有一个视图:
@permission_required('storage.add_iteminrelease')
@transaction.atomic
def add_item_in_release(request, id):
release = get_object_or_404(Release, pk=id)
if (request.method == 'POST'):
add_item_in_release_form = ItemInReleaseForm(request.POST)
if add_item_in_release_form.is_valid():
add_item_in_release_form.instance.release = release
item = add_item_in_release_form.cleaned_data['item']
if item.count < add_item_in_release_form.cleaned_data['count']:
messages.add_message(request,
messages.ERROR,
'Кол-во выдачи не должно превышать ' + str(item.count))
return redirect('/releases/details/' + str(id) + '/')
item.count -= add_item_in_release_form.cleaned_data['count']
item.save()
item_in_release, create = ItemInRelease.objects.get_or_create(item=add_item_in_release_form.cleaned_data['item'],
release=release,
defaults={'count': add_item_in_release_form.cleaned_data['count']})
if not create:
item_in_release.count += add_item_in_release_form.cleaned_data['count']
item_in_release.save()
messages.add_message(request,
messages.SUCCESS,
'Позиция успешно добавлена')
return redirect('/releases/details/' + str(id) + '/')
messages.add_message(request,
messages.ERROR,
add_item_in_release_form.errors.as_data())
return redirect('/releases/details/' + str(id) + '/')
else:
add_item_in_release_form = ItemInReleaseForm()
return render(request,
'add_item_in_release.html',
{'add_item_in_release_form': add_item_in_release_form,
'id': id})
还有一个对应的HTML模板,这个模板是从另一个模板中加载到Bootstrap模态窗口里的:
<div class="modal fade" id="add-item" tabindex="-1" aria-labelledby="add-item-label" aria-hidden="true"
dats-bs-focus="false">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="add-item-label">Добавление позиции</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<form action="{% url 'storage:add-item-in-release' id %}" method="POST" class="form" novalidate>
<div class="modal-body">
{% csrf_token %}
<div class="form-floating w-100 mb-3">
{{ add_item_in_release_form.contract }}
<label for="count">Договор</label>
</div>
<div class="input-group flex-nowrap mb-3">
<div class="form-floating w-100">
<input class="form-control" id="item-datalist" placeholder="Позиция" name="item"
type="text" list="items" autocomplete="off">
<datalist id="items">
{% for i in add_item_in_release_form.fields.item.queryset %}
<option data-value="{{ i.id }}" data-count="{{ i.count }}" data-contract="{{ i.contract }}" value="{{ i.item.manufacturer.name }} {{ i.item.article }} {{ i.contract }}"></option>
{% endfor %}
</datalist>
<label for="item-datalist">Позиция</label>
</div>
<button class="btn btn-outline-secondary" type="button" id="clear-input" title="Очистить">
<i class="fa fa-eraser"></i>
</button>
</div>
<div class="input-group flex-nowrap mb-3">
<div class="form-floating w-100">
{{ add_item_in_release_form.count }}
<label for="count">Кол-во</label>
</div>
<span class="input-group-text w-25" id="count-label" title="Максимальное кол-во"></span>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-outline-success">Добавить</button>
<button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal">Отменить</button>
</div>
</form>
</div>
</div>
</div>
当我调用这个视图时,页面加载需要10秒钟,但其他页面加载得很快。为什么这个代码这么慢呢?可能是因为我有大约1000个选项在数据列表中?我不太明白。
1 个回答
暂无回答