2010-11-02 18 views
0

Bonjour J'essaie d'afficher les ordres de travail de ma base de données mysql pour apparaître dans un e-mail. Cependant, il y a un problème car work_orders fait partie de mon champ manytomany de la classe Facture. Cela me donne cette erreur.ne peut pas afficher les ordres de travail dans un e-mail

'ManyRelatedManager' object has no attribute 'description' 

Je ne sais pas vraiment quel est le problème. Voici une partie de mon application qui pourrait être utile.

#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), '[email protected]', ['[email protected]'], 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}} 
+0

Êtes-vous essayer d'obtenir invoices_list [0]. work_orders.description? –

+0

Quelque chose comme ça oui. – Shehzad009

Répondre

2

À moins que vous avez ajouté un champ de description pour le gestionnaire, l'attribut n'existe pas (comme il est dit). Peut-être que vous voulez utiliser

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

ou dans un modèle

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

Et vous devez peut-être changer dans le contexte

'work_orders': work_orders 
+0

Le seul problème que je rencontre est que je n'utilise pas un modèle HTML standard. J'utilise un document texte, car les tags ne fonctionnent pas dans un e-mail. – Shehzad009

+0

En fait, après avoir tapé la partie des vues du code, il a effectivement travaillé;). – Shehzad009

1

work_orders n'est pas une liste. C'est un gestionnaire d'accesseur/ORM pour votre champ plusieurs-à-plusieurs.

Pour obtenir les commandes réelles de travail, vous devez faire work_orders.all() (ou .filter(foo=bar)), puis itérer sur chaque commande de travail que vous revenez à les formater décemment pour inclure dans un courriel