def test_log_actions(self): ma = ModelAdmin(Band, self.site) mock_request = MockRequest() mock_request.user = User.objects.create(username='******') self.assertEqual(ma.log_addition(mock_request, self.band, 'added'), LogEntry.objects.latest('id')) self.assertEqual(ma.log_change(mock_request, self.band, 'changed'), LogEntry.objects.latest('id')) self.assertEqual(ma.log_change(mock_request, self.band, 'deleted'), LogEntry.objects.latest('id'))
def rent_out(request, id, pk): book_inst = get_object_or_404(BookInstance, id=id) # If this is a POST request then process the Form data if request.method == 'POST': # Create a form instance and populate it with data from the request (binding): form = RentOutForm(request.POST, error_class=DivErrorList) # Check if the form is valid: if form.is_valid(): # process the data in form.cleaned_data as required (here we just write it to the model due_back field) book_inst.status = form.cleaned_data['status'] book_inst.borrower = form.cleaned_data['borrower'] book_inst.appointment = form.cleaned_data['appointment'] book_inst.due_back = form.cleaned_data['due_back'] book_inst.appointment_time = form.cleaned_data['appointment_time'] book_inst.save() history = History.objects.create(master=book_inst.borrower) history1 = HistoryByManager.objects.create( master=book_inst.borrower) history.rent_time = datetime.date.today() history.books = book_inst.book.title history1.rent_time = datetime.date.today() history1.books = book_inst.book.title history.save() history1.save() # record log from django.contrib.admin.options import ModelAdmin object = book_inst message = '成功修改当前图书副本' ModelAdmin.log_change(request, request, object, message) # redirect to a new URL: return HttpResponseRedirect( reverse_lazy('catalog:book-detail', args=(pk, )) + '?success=4') # If this is a GET (or any other method) create the default form. else: proposed_renewal_date = datetime.date.today() + datetime.timedelta( weeks=3) form = RentOutForm(initial={ 'status': 'o', 'borrower': book_inst.borrower, 'due_back': proposed_renewal_date, 'appointment': book_inst.appointment, }, error_class=DivErrorList) return render(request, 'catalog/bookinstance_form.html', { 'form': form, 'bookinst': book_inst })
def add(request): """ Process the add form. """ model = get_model(request.POST["app"], request.POST["model"]) if not can("add", model, request.user): return {"valid": True, "permissionerror":"You don't have permission to add!"} obj = model() form = get_model_form(obj, request.POST["fields"], data=request.POST,\ files=request.FILES, parent_model_related_name=request.POST["parent_model_related_name"],\ parent_model=request.POST["parent_model"], \ parent_id = request.POST["parent_id"]) if form.is_valid(): saved_obj=form.save() 'Create change message' try: model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, saved_obj, message) except Exception: pass data = { 'id': saved_obj.id, 'valid': True, } else: "from django_ajax_validation" errors = form.errors formfields = dict([(fieldname, form[fieldname]) for fieldname in form.fields.keys()]) final_errors = {} for key, val in errors.iteritems(): if '__all__' in key: final_errors[key] = val else:# not isinstance(formfields[key].field): html_id = formfields[key].field.widget.attrs.get('id') or formfields[key].auto_id html_id = formfields[key].field.widget.id_for_label(html_id) final_errors[html_id] = val data = { 'valid': False, 'errors': final_errors, } return data
def edit(request): """ Process the inline editing form. """ model = get_model(request.POST["app"], request.POST["model"]) obj = model.objects.get(id=request.POST["id"]) form = get_edit_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) if not is_editable(obj, request): response = _("Permission denied") elif form.is_valid(): form.save() model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, obj, message) response = "" else: response = form.errors.values()[0][0] return HttpResponse(unicode(response))
def edit(request): """ Process the inline editing form. """ try: model = get_model(request.POST["app"], request.POST["model"]) if not can("change", model, request.user): return {"valid": True, "permissionerror":"You don't have permission to edit!"} obj = model.objects.get(id=request.POST["id"]) form = get_model_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) except Exception: pass if form.is_valid(): form.save() model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, obj, message) data = { 'valid': True } else: "from django_ajax_validation" errors = form.errors formfields = dict([(fieldname, form[fieldname]) for fieldname in form.fields.keys()]) # pprint (errors) final_errors = {} for key, val in errors.iteritems(): if '__all__' in key: final_errors[key] = val elif not isinstance(formfields[key].field): html_id = formfields[key].field.widget.attrs.get('id') or formfields[key].auto_id html_id = formfields[key].field.widget.id_for_label(html_id) final_errors[html_id] = val data = { 'valid': False, 'errors': final_errors, } return data
def logChange(request, obj, message): # log_change can be used as static method, passing None as self ModelAdmin.log_change(None, request, obj, message)