2014-10-25 6 views
0

Привет Я новичок в Django, и я не получаю связанный объект в сквозной модели.Получить связанное поле m2m django хотя

Мой код:

#models.py 
class Candidate(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    birth = models.CharField(max_length=50) 
    ... 

class Job(models.Model): 
    candidate = models.ManyToManyField('Candidate', through='CandidateToJob') 
    title = models.CharField(max_length=500) 
    ... 

class CandidateToJob(models.Model): 
    job = models.ForeignKey(Job, related_name='applied_to') 
    candidate = models.ForeignKey(Candidate, related_name='from_user') 
    STATUS_CHOICES = (
     ('1', 'Not approved'), 
     ('2', 'Approved'), 
     ('3', 'Hired') 
    ) 
    status = models.CharField(max_length=2, choices=STATUS_CHOICES) 

В воззрениях у меня есть

#views.py 
class Screening(generic.DetailView): 
    model = Job 
    template_name = 'dashboard/screening.html' 

    def get_context_data(self, **kwargs): 
     context = super(Screening, self).get_context_data(**kwargs) 
     context['candidate_list'] = self.object.candidate.select_related().annotate 
     return context 

шаблон у меня есть:

#url.py 
url(r'^dashboard/job/(?P<pk>\d+)/screening/$', views.Screening.as_view(), name='screening'), 

#HTML 
{% for candidate in candidate_list %} 

    {{ candidate.user.get_full_name }} #this works 

    {% for candidatetojob in job.candidatetojob_set.all %} 
      {{ candidatetojob.get_status_display }} 
    {% endfor %} 

{% endfor %} 

Дело в том, я не в состоянии получить статус связанные с кандидатом на конкретную работу. Как я могу его получить?

А как лучше всего обновить этот статус без перезагрузки всей страницы?

Заранее спасибо

+0

Если вы хотите получить доступ к экземпляру модели в шаблоне - имя по умолчанию, которое обеспечивает DetailView является 'object' , Поэтому вместо 'job.candidatetojob_set.all' try' object.candidatetojob_set.all' – madzohan

+0

И лучший способ обновить статус без перезагрузки всей страницы - использовать AJAX (отправить обновленные данные и объект pk в некоторый вид и сохранить там) – madzohan

+0

Спасибо. Можете ли вы привести пример того, как выполнить обновление ajax? –

ответ

0

О, я мог бы получить статус кандидата с помощью:

{% for candidate in object.applied_to.all %} 
    {{ candidate.get_status_display }} 
{% endfor %}