2010-07-27 6 views
5

Ho scritto questi modelli in models.py:scrivendo una query di django e ottieni oggetti correlati al contrario in un colpo di database!

 
class User(models.Model): 
    first_name = models.CharField(max_length=80) 

class Skill(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=80) 
    level = models.IntegerField(default=3) 

class Work(models.Model): 
    user = models.Foriegnkey(User) 
    work_name = models.CharField(max_length=80) 
    salary = models.IntegerField() 

ora voglio ottenere quelle opere dal database che i loro utenti hanno una certa abilità, e rendere un html con loro. scrivo questo codice in views.py:

 
def show_works(request, skill): 
    works = Work.objects.select_related().filter(user__skill__title=skill) 
    return render_to_response("works.html", {'works':works}) 

Ma c'è un'altra cosa che voglio mostrare in che HTML: voglio mostrare first_name dell'utente di quel lavoro e la sua abilità. ho usato select_related(), ma posso solo mostrare first_name ma non riesco a raggiungere le competenze dell'utente.

voglio scrivere una query ottimale per ottenere i lavori e le altre informazioni extra, come l'utente e le capacità dell'utente! come il codice colpo: (non voglio colpire database per ogni lavoro per ottenere le abilità del suo utente)

modello works.html:

 
{% for work in works %} 
    
     {{work.work_name}} 
     user is : {{work.user.first_name}} 
     which has these skills: 
     {% for skill in work.user.skill %} 
      {{skill.title}} 
     {% endfor %} 
    
{% endfor %} 

risposta

3

Avrete probabilmente mai guardare a questo nuovo, ma proverò a rispondere comunque.

Vorrei pensare che questo dovrebbe funzionare:

{% for skill in work.user.skill_set.all %} 
    {{skill.title}} 
{% endfor %} 
+1

Thanks :) ho guardato. – Mehran

Problemi correlati