Использование send_mail в Django: невозможно отобразить данные в счете из функций - PullRequest
2 голосов
/ 21 октября 2010

еще один вопрос Django send_mail. Похоже, у меня проблемы с отображением данных в электронном письме, которые отделяют форму от функции. Похоже, это переменная проблема.

Редактировать: Мне удалось отобразить имя клиента! Теперь как можно то же самое с инвойсом. Скажите, что я хотел показать дату, invoice_no, work_orders & contract_info?

    #models.py
    class Invoice(models.Model):
    client = models.ForeignKey(Client)
    date = models.DateField()
    invoice_no = models.CharField(max_length=16)
    work_orders = models.ManyToManyField(Work_Order)
    contract_info = models.ForeignKey(Contract_Info)

    def __unicode__(self):
                return self.invoice_no

    #views.py
    @login_required
    def invoice_mail(request, id=1):
        invoices_list = Invoice.objects.filter(pk=id)
        client = invoices_list[0].client
        t = loader.get_template('registration/email.txt')
        c = Context({
        'client': client.company,
        })
        send_mail('Welcome to My Project', t.render(c), 'jess@example.com', ['mark@example.com'], fail_silently=False)
        return render_to_response('email.html', locals(), context_instance=RequestContext(request))

Вот мой email.txt

Dear {{client}},

И когда я отправляю его на свой адрес электронной почты, я получаю это

Дорогой Карри,

Ответы [ 2 ]

5 голосов
/ 21 октября 2010

Это не имеет ничего общего с send_mail. Вы отправляете это в контекст вашего шаблона "

c = Context({
    'invoice': 'invoice.client',
    })

Здесь invoice - это строка, содержащая текст invoice.client. Вам необходимо отправить реальный объект. Однако ваше имя неясно, поэтому я не могу сказать, хотите ли вы отправить объект Invoice или связанный с ним клиент.

1 голос
/ 22 октября 2010

Как уже указывал Даниил.

c = Context({
    'client': 'client.company',
})

Должно быть:

c = Context({
    'client': client.company,
})

Когда вы заключаете что-то в '', оно становится строкой, а не объектом, на который оно указывало.

...