def membership_export(request): from django.template.defaultfilters import slugify template_name = 'memberships/export.html' form = ExportForm(request.POST or None, user=request.user) if request.method == 'POST': if form.is_valid(): app = form.cleaned_data['app'] file_name = "%s.csv" % slugify(app.name) exclude_params = ( 'horizontal-rule', 'header', ) fields = AppField.objects.filter(app=app, exportable=True).exclude(field_type__in=exclude_params).order_by('position') label_list = [field.label for field in fields] extra_field_labels = ['User Name','Member Number','Join Date','Renew Date','Expiration Date','Status','Status Detail'] extra_field_names = ['user','member_number','join_dt','renew_dt','expire_dt','status','status_detail'] label_list.extend(extra_field_labels) label_list.append('\n') data_row_list = [] memberships = Membership.objects.filter(ma=app) for memb in memberships: data_row = [] field_entry_d = memb.entry_items for field in fields: field_name = slugify(field.label).replace('-','_') value = '' if field.field_type in ['first-name','last-name','email','membership-type','payment-method','corporate_membership_id']: if field.field_type == 'first-name': value = memb.user.first_name elif field.field_type == 'last-name': value = memb.user.last_name elif field.field_type == 'email': value = memb.user.email elif field.field_type == 'membership-type': value = memb.membership_type.name elif field.field_type == 'payment-method': if memb.payment_method: value = memb.payment_method.human_name elif field.field_type == 'corporate_membership_id': value = memb.corporate_membership_id if field_entry_d.has_key(field_name): value = field_entry_d[field_name] if value == None: value = '' if type(value) in (bool,int,long): value = unicode(value) value = value.replace(',', ' ') data_row.append(value) for field in extra_field_names: if field == 'user': value = memb.user.username elif field == 'join_dt': if memb.renewal: value = '' else: value = memb.subscribe_dt elif field == 'renew_dt': if memb.renewal: value = memb.subscribe_dt else: value = '' elif field == 'expire_dt': value = memb.expire_dt or 'never expire' else: value = getattr(memb, field, '') if type(value) in (bool,int,long): value = unicode(value) data_row.append(value) data_row.append('\n') data_row_list.append(data_row) return render_excel(file_name, label_list, data_row_list, '.csv') return render_to_response(template_name, { 'form':form }, context_instance=RequestContext(request))