def cancel_registration(modeladmin, request, queryset): messages = [] subject = u"PyCon APAC 2016 결제 취소 알림" body = u""" 안녕하세요. PyCon APAC 준비위원회입니다. 결제가 취소되었음을 알려드립니다. 결제 대행사 사정에 따라 다소 늦게 카드 취소가 이뤄질 수 있습니다. 다른 문의 사항은 [email protected] 로 메일 부탁드립니다. 감사합니다. """ from_email = "*****@*****.**" results = [] now = datetime.now() access_token = get_access_token(config.IMP_API_KEY, config.IMP_API_SECRET) imp_client = Iamporter(access_token) for obj in queryset: if obj.payment_method != 'card': obj.cancel_reason = u'카드 결제만 취소 가능' results.append(obj) continue if obj.payment_status != 'paid': obj.cancel_reason = u'결제 완료만 취소 가능' results.append(obj) continue try: imp_params = dict( merchant_uid=obj.merchant_uid, reason=u'Cancel by admin', ) imp_client.cancel(**imp_params) except IOError: obj.cancel_status = 'IOError' results.append(obj) continue except IamporterError as e: obj.cancel_status = e.code obj.cancel_reason = e.message results.append(obj) continue obj.canceled = now obj.payment_status = 'cancelled' obj.save(update_fields=['payment_status', 'canceled']) obj.cancel_status = 'CANCELLED' results.append(obj) message = (subject, body, from_email, [obj.email]) messages.append(message) send_mass_mail(messages, fail_silently=False) return render(request, 'registration/cancellation_result.html', {'results': results})