from django.shortcuts import render, redirect, reverse from django.http.response import JsonResponse from django.views.generic.base import View from apps.goods.models import * from apps.goods.forms import * # Create your views here. class GoodCateView(View): def get(self, request): cates = GoodsCategory.objects.all() print(cates) return render(request, 'goods/cate_index.html', {'cates': cates}) def post(self, request): pass class GoodCateAddView(View): def __init__(self): self.alist = [] def bind_data(self, data, _id, n): if id == 0: data = data.filter(parent__isnull=True) else: data = data.filter(parent=_id) for d in data: print(d) self.alist[d.id] = self.space_length(n) + d.name self.bind_data(d, d.id, n + 2) return self.alist def space_length(self, i): space = '' for j in range(1, i): space += "  " return space + "|--" def get(self, request): form_obj = GoodsCateForm() return render(request, 'goods/cate_add.html', {'form_obj': form_obj}) def post(self, request): form_obj = GoodsCateForm(request.POST, request.FILES) if form_obj.is_valid(): name = request.POST.get('name', '') cates = GoodsCategory.objects.filter(name=name) if cates: info = '分类已经存在' else: cate = GoodsCategory.objects.create(**form_obj.cleaned_data) return redirect('cate_index') return render(request, 'goods/cate_add.html', {'form_obj': form_obj, 'info': info}) else: errors = form_obj.errors print(errors) return render(request, 'goods/cate_add.html', {'form_obj': form_obj, 'info': errors}) class GoodView(View): def __init__(self): self.alist = {} def binddata(self, datas, id, n): if id == 0: datas = GoodsCategory.objects.filter(parent__isnull=True) else: datas = GoodsCategory.objects.filter(parent_id=id) for data in datas: self.alist[data.id] = self.spacelength(n) + data.name self.binddata(datas, data.id, n + 2) return self.alist def spacelength(self, i): space = '' for j in range(1, i): space += "  " return space + "|--" def get(self, request): cates_all = GoodsCategory.objects.all() cates = self.binddata(cates_all, 0, 1) print(cates) return render(request, 'goods/goods_index.html', {'cates': cates}) def post(self, request): pass class GoodsAddView(View): def __init__(self): self.alist = {} def binddata(self, datas, id, n): if id == 0: datas = GoodsCategory.objects.filter(parent__isnull=True) else: datas = GoodsCategory.objects.filter(parent_id=id) for data in datas: self.alist[data.id] = self.spacelength(n) + data.name self.binddata(datas, data.id, n + 2) return self.alist def spacelength(self, i): space = '' for j in range(1, i): space += "  " return space + "|--" def get(self, request): cates_all = GoodsCategory.objects.all() cates = self.binddata(cates_all, 0, 1) return render(request, 'goods/goods_add.html', {'cates': cates}) def post(self, request): good_dict = dict() good_dict['name'] = request.POST.get('name', '') cate_id = request.POST.get('parent_id', '') if cate_id: good_dict['category'] = GoodsCategory.objects.filter(id=cate_id) good_dict['market_price'] = request.POST.get('market_price', '0') good_dict['price'] = request.POST.get('price', '0') good_dict['goods_desc'] = request.POST.get('goods_desc', '') good_dict['main_img'] = request.POST.get('main_img', '') message = '字段需要填写' if not good_dict['name']: message = '请输入姓名' r = Goods.objects.create(**good_dict) print(r) return redirect(reverse('good_index')) def ajax_goods(request): cate_id = request.POST.get('cate_id', '') goodname = request.POST.get('goodname', '') status = request.POST.get('status') search_dict = dict() if cate_id: search_dict['category'] = cate_id if goodname: search_dict['name__contains'] = goodname if status: search_dict['status'] = status page_size = 2 page = int(request.GET['page']) total = Goods.objects.filter(**search_dict).count() goods = Goods.objects.filter(**search_dict).order_by('-id')[(page - 1) * page_size: page * page_size] rows = [] datas = {'total': total, 'row': rows} for good in goods: print(good.category.name) rows.append({ 'id': good.id, 'name': good.name, 'market_price': good.market_price, 'price': good.price, 'category_id': good.category.name, 'click_num': good.click_num, 'amount': good.amount, }) return JsonResponse(datas, safe=False, json_dumps_params={'ensure_ascii': False, 'indent': 4})