首页 > 解决方案 > Django比较两个查询集并附加自定义对象

问题描述

我有两个模型

class Position(models.Model):
    ...   
    job_seekers = models.ManyToManyField(settings.AUTH_USER_MODEL)

class Applicants(models.Model):
    position = models.ForeignKey(Position, on_delete=models.CASCADE)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )

我正在尝试将自定义变量“selected”附加到我的查询集,以使用以下代码跟踪出现在 job_seekers ManytoMany 字段和申请人模型中的用户。

views.py
        position = get_object_or_404(Position, pk=self.object.pk)
        applicants = Applicant.objects.filter(position=position)
        result_list = position.job_seekers.annotate(selected=F(applicant__user))

所以我可以在我的模板中突出显示选定的用户,例如

 {% if applicant.pk == applicant.selected %}

如何在不必更改数据库结构的情况下做到这一点?

谢谢

标签: pythondjangoappendcomparedjango-queryset

解决方案


可能您可以使用条件表达式(case)这样尝试:

from django.db.models import Case, When, F, Value

applicants = Applicant.objects.filter(position=position).annotate(
    is_selected=Case(
        When(
            user__in = F('position__job_seekers'),
            then=Value(True)
        ),
        default=Value(False),
        output_field=BooleanField()
    )
)

并在模板中使用它:

{% for applicant in applicants %}
    {% if applicant.is_selected %}
      // do something
    {% endif %}
{% endfor %}

推荐阅读