这是我的models.py
:
APPLICATION_STATUS = (
('Pending', 'Pending'),
('Shorlisted', 'Shortlisted'),
('Not Shortlisted', 'Not Shortlisted'),
)
class Vacancy(models.Model):
name = models.CharField(max_length=200)
class Applicant(models.Model):
year = models.IntegerField(default=datetime.date.today().year)
vacancy = models.ForeignKey(Vacancy, on_delete=models.SET_NULL, related_name='applicants')
status = models.CharField(max_length=200, choices=APPLICATION_STATUS)
因此,我正在尝试检查特定空缺的所有申请人的status
是否不正在模板中,但我无法解决。
到目前为止,这是我的模板:
{% for vacancy in vacancies %}
<tr>
<td>{{forloop.counter}}</td>
<td>{{vacancy.vacancy_number}}</td>
<td>{{vacancy.name}}</td>
<td class="text-center">{{vacancy.applicants.count}}</td>
<td>
{% if vacancy.applicants.count > 0 %}
{% if vacancy.closing_date < today %}
[<a href="{% url 'shortlisting' vacancy.id %}">Shortlist</a>]
{% else %}
Vacancies are still active
{% endif %}
{% else %}
No applications for vacancy
{% endif %}
</td>
</tr>
{% endfor %}
如何检查:
vacancy.applicants.status != "Pending"
只是大致了解要实施的内容。
我知道我可以使用vacancy.applicants
来获得特定空缺的所有相关申请人,但是我无法解决这些申请人的状态是否待定。
答案 0 :(得分:1)
如果您要遍历Applicants
到特定的Vacancy
并逐一检查,请使用:
{% for applicant in vacancy.applicants.all %}
{% if applicant.status != "Pending" %}
<!-- do something here -->
{% endif %}
{% endfor %}
,或者如果您只想检查特定status
的所有申请人的vacancy
是否未待审核,并且模板中需要是/否答案,请在您的Vacancy
模型中添加属性,如下所示:
class Vacancy(models.Model):
name = models.CharField(max_length=200)
@property
def check_all_applicant_status(self):
return self.applicants.exclude(status='Pending').exists()
并在您的模板中:
<p>{% vacancy.check_all_applicant_status %}</p>
答案 1 :(得分:1)
Django不允许在模板中进行过滤,因此您必须在视图中进行过滤或使用模板标签。
您可以在视图中使用注释:
from django.db.models import Count, Q
vacancies = Vacancy.objects.all().annotate(pending_count=Count("applicants", filter=Q(applicants__status="Pending")))
现在,如果pending_count
为0,则表明空缺实例中没有处于待处理状态的申请人。
{% if vacancy.pending_count == 0 %}
<p>None of the applicants are pending ...</p>
{% endif %}