def item_add(request): if request.method == 'POST': form = AddItemForm(request.POST, request.FILES) if form.is_valid(): cd = form.cleaned_data name = request.FILES['file'].name f = request.FILES['file'] m = hashlib.md5() m.update(os.urandom(32)) m.update(name.encode('utf8')) uid = m.hexdigest() dir_path = os.path.join(settings.STATIC_ROOT, 'files', uid) os.mkdir(dir_path) path = os.path.join(dir_path, name) with open(path, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) item = Item() item.name = cd['name'] item.description = cd['description'] item.filename = f.name item.size = f.size item.uid = uid item.created = datetime.utcnow().replace(tzinfo=utc) item.updated = datetime.utcnow().replace(tzinfo=utc) item.save() tags = {} if cd['year'] is None: tags['year'] = "" else: tags['year'] = str(cd['year']) tags['people'] = cd['authors'] tags['company'] = cd['company'] tags['type'] = cd['kind'] tags[None] = cd['tags'] fill_tags(item, tags) return HttpResponseRedirect('/item/%d' % item.id) else: form = AddItemForm() # An unbound form return render(request, 'item_add.html', {'form': form, 'edit': False})
def get_tag_items(request, tags): l = tags.split(",") ids = [] for v in l: ids.append(int(v)) ids = sorted(list(set(ids))) tags = Tag.objects.filter(id__in=ids) current_tags = tags # Construct current taglist string ids = [] for tag in tags: ids.append(tag.id) tids = ",".join(map(str, ids)) if len(tids)>0: tids = tids + "," # Get subtags subtags = Tag.subtags(tags) # Get items by subtags latest_item_list = Item.subitems(tags).order_by('-updated') size = len(latest_item_list) # Filter tag list tags = [] for tag in subtags: if tag.count != size: tags.append(tag) subtags = tags # Build pagination page = request.GET.get('page') paginator = Paginator(latest_item_list, 10) try: items = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. items = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. items = paginator.page(paginator.num_pages) items = paginator_post_process(items) return render(request, 'tag_items.html', {'tags': subtags, 'tids': tids, 'items': items, 'current_tags': current_tags})
def test_saving_and_retrieving_items(self): list_ = List() list_.save() first_item = Item() first_item.text = 'The first (ever) list item' first_item.list = list_ first_item.save() second_item = Item() second_item.text = 'Item the second' second_item.list = list_ second_item.save() saved_list = List.objects.first() self.assertEqual(saved_list, list_) saved_items = Item.objects.all() self.assertEqual(saved_items.count(), 2) first_saved_item = saved_items[0] second_saved_item = saved_items[1] self.assertEqual(first_saved_item.text, 'The first (ever) list item') self.assertEqual(first_saved_item.list, list_) self.assertEqual(second_saved_item.text, 'Item the second') self.assertEqual(second_saved_item.list, list_)