Joindre fichier CSV généré à l'e-mail et envoyez-le avec Django
J'ai besoin de générer un fichier csv basé sur le queryset résultat, joindre le fichier à un e-mail en tant que pièce jointe et de l'envoyer. Comme vous pouvez le voir j'ai besoin d'itérer sur les assigned_leads et l'écrire dans un fichier, donc j'ai pensé de rendement ferait l'affaire. Maintenant quand je lance le code, je l'ai reçu le mail avec la pièce jointe avec le message ci-dessous à la place des lignes j'attends. Si j'utilise de retour-je obtenir une ligne de queryset résultat.
<generator object data at 0x7f5e508d93c0>
def send_lead_reminder(request):
usercompany = Listing.objects.filter(submitted_by=request.user)
assigned_leads = lead.objects.filter(assigned_to__in=usercompany).distinct()
def data():
csvfile=StringIO.StringIO()
csvwriter =csv.writer(csvfile)
for leads in assigned_leads:
csvwriter.writerow([leads.business_name, leads.first_name, leads.last_name, leads.email, leads.phone_number,leads.address, leads.city, leads.state, leads.zipcode, leads.submission_date, leads.time_frame, leads.comments])
yield csvfile.getvalue()
message = EmailMessage("Hello","Your Leads","[email protected]",["[email protected]"])
message.attach('invoice.csv', data(), 'text/csv')
#message.to="[email protected]"
message.send()
return HttpResponseRedirect('/')
Vous devez vous connecter pour publier un commentaire.
Est-il une raison particulière pour laquelle vous êtes à l'aide d'une fonction supplémentaire à tous? Créez simplement votre fichier csv dans la mémoire, vous ne pouvez pas éviter que si vous êtes à la joindre à l'email et l'envoyer.
csv.writer()
s'attend à un mode texte filelike objet, de sorteStringIO
est correct là - bas, vous aurez besoin de coder avant de l'attacher. Je pense quecsvfile.getvalue().encode(...)
devrait être suffisant, probablement en utf-8 comme encodage choix, mais cela pourrait être quelque chose de différent.Python 3 et
DictWriter
exemple: