25

クエリセットの結果に基づいて csv ファイルを生成し、結果のファイルをメールに添付して送信する必要があります。ご覧のとおり、assigned_leads を反復処理してファイルに書き込む必要があるため、yield でうまくいくと思いました。コードを実行すると、期待する行ではなく、以下のメッセージが添付されたメールが届きます。return を使用すると、クエリセットの結果から 1 行を取得します。

<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","myemail@gmail.com",["myemail@gmail.com"])
    message.attach('invoice.csv', data(), 'text/csv')
    #message.to="myemail@gmail.com"
    message.send()
    return HttpResponseRedirect('/')
4

3 に答える 3

44

追加機能を使用している特定の理由はありますか? csv をメモリ内に作成するだけです。メールに添付する場合は、これを避けることはできません。送信してください。

assigned_leads = lead.objects.filter(assigned_to__in=usercompany).distinct()
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])
message = EmailMessage("Hello","Your Leads","myemail@gmail.com",["myemail@gmail.com"])
message.attach('invoice.csv', csvfile.getvalue(), 'text/csv')
于 2013-07-11T03:29:58.353 に答える
7

Python 3 とDictWriter例:

import csv
from io import StringIO
from django.core.mail import EmailMessage

rows = [{'col1': 'value1', 'col2': 'value2'}]
csvfile = StringIO()
fieldnames = list(rows[0].keys())

writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)

email = EmailMessage(
        'Subject',
        'Body',
        'from@email.com',
        ['to@email.com'],
    )
email.attach('file.csv', csvfile.getvalue(), 'text/csv')
email.send()
于 2016-11-18T16:40:53.343 に答える