카테고리 없음
[ajax]
쑤야뚜야
2021. 4. 29. 00:08
ajax 사용법
예) 품번이 변경되면 선택된 지점의 재고를 계산해서 출력
html의 javascript에 아래 코드 입력
$("select[id=id_itemNumber]").change(function () {
setStock();
})
function setStock() {
var item_id = $('#id_itemNumber').val();
var selected_office = '{{ selected_office }}';
$.ajax({
type: "post",
url: "/ajax_set_stock/",
data : {'csrfmiddlewaretoken': '{{ csrf_token }}', 'item_id': item_id, 'selected_office': selected_office },
dataType: "json",
success: function (response) {
$('#id_stock').val( response.sum_qty );
},
error: function (request, status, error) {
alert('error');
}
});
}
// ajax에서 post 타입은 data에서는 CSRF공격에 대한 방어를 위해 'csrfmiddlewaretoken' : '{{ csrf_token }}'을 지정해줘야 error가 안남.
----------------------------------------------------------------------------------------------------------------------------------
파이썬 파일에 (필자는 emport.py파일에 지정)
ajax에서 지정한 url(클래스 명) 생성
class ajax_set_stock(View):
def post(self, request):
item_id = request.POST.get('item_id');
selected_office = request.POST.get('selected_office');
dic = {}
try:
iqs = Inventory.objects.filter(itemNumber_id=item_id)
qs_buy = iqs.filter(flag='매입', storage=selected_office)
qs_export = iqs.filter(flag='출고', storage=selected_office)
qs_list = qs_buy | qs_export
sqs = qs_list.values('itemNumber', 'itemNumber__itemNumber').annotate(
sum_qty=Sum(Case(
When(
flag='매입', storage=selected_office,
then='quantity'),
When(
flag='출고', storage=selected_office,
then=F('quantity') * (-1)),
), ).order_by('itemNumber__itemNumber')
dic['sum_qty'] = col_round(sqs.first()['sum_qty'])
except Exception as e:
dic['sum_qty'] = 0
return JsonResponse(dic)
def col_round(x):
frac = x - math.floor(x)
if frac < 0.5: return math.floor(x)
return math.ceil(x)
매입일 경우 +, 출고일 경우 - 하여 재고를 계산하는 코드입니다.
---------------------------------------------------------------------------------------------------------------------------------
마지막으로 url 파일에 경로를 넣어줍니다.
path("ajax_set_stock/", ajax_set_stock.as_view(), name='ajax_set_stock'),