не может отображать рабочие задания в электронном письме - PullRequest
0 голосов
/ 02 ноября 2010

Здравствуйте. Я пытаюсь отобразить рабочие задания из моей базы данных mysql для отображения в электронном письме. Однако есть проблема, потому что work_orders является частью моего поля Class Invoice Manytomany. Это дает мне эту ошибку.

'ManyRelatedManager' object has no attribute 'description'

Я не совсем уверен, в чем проблема. Вот некоторая часть моего приложения, которая может быть полезна.

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


email.txt

INVOICE


Bill to:                            INVOICE # {{invoice_no}}
{{client}}                          DATE: {{date}}
{{address}}
{{city}}
{{postcode}}
{{email}}

quantity item Description
              {{work_orders.description}}

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Если вы не добавили поле описания в менеджер, атрибут не существует (как он говорит). Может быть, вы хотите использовать

for order in work_orders.all():
    print order.description

или в шаблоне

{% for order in work_orders.all }}
    {{ order.description }}
{% endfor %}

А может быть, вам нужно изменить это в контексте

'work_orders': work_orders
1 голос
/ 02 ноября 2010

work_orders - это не список.Это менеджер доступа / ORM для вашего поля «многие ко многим».

Чтобы получить фактические рабочие задания, вам нужно выполнить work_orders.all() (или .filter(foo=bar)), а затем выполнить итерацию для каждого полученного рабочего заказа.вернуться к форматированию их прилично для включения в электронную почту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...