python - 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 %}
如何在不必更改数据库结构的情况下做到这一点?
谢谢
解决方案
可能您可以使用条件表达式(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 %}
推荐阅读
- php - 如何在 PHP 中将选定的选项值作为字符串获取?
- flutter - 如何在颤动中禁用模态底页上的后退按钮?
- spring - 如何急切注入spring security的认证管理器
- python - 尝试使用 mariaDB 连接器初始化连接池时,Python 崩溃并显示代码 -1073741819 (0xC0000005)
- python - 从数据框中提取矩阵
- selenium-webdriver - 如何使用 selenium 捕获 gmail 生成的警报框
- python - 如何在 Ruby 中将整数转换为字节字符串?
- java - 线性求解 NxN 矩阵问题的时间复杂度是多少?
- php - 我无法使用 PDO 插入数据库
- java - 如何在 Java 中查询 kubelet 指标 API?