【发布时间】:2015-08-23 21:56:58
【问题描述】:
我有一个模型,其中我们有候选人、语言和语言级别实体:
class Candidate(models.Model):
user = models.ForeignKey(MyUser)
telephone = models.CharField(max_length=20, unique=True)
postcode = models.CharField(max_length=10)
class Language(models.Model):
name = models.CharField(max_length=50)
class LanguageLevel(models.Model):
candidate = models.ForeignKey(Candidate)
language = models.ForeignKey(Language)
level = models.IntegerField(max_length=1, choices=LANGUAGE_LEVEL, default=0)
我的原始查询是:
SELECT c.id, COUNT(c.id) as total
FROM candidates as c
JOIN language_level as ll ON ll.candidate_id=c.id
JOIN languages as l ON ll.language_id=l.id
WHERE ((ll.level >=1 AND l.id = 1 ) OR
(ll.level >=1 AND l.id = 2 ) OR
(ll.level >=1 AND l.id = 3 ) OR
(ll.level >=3 AND l.id = 4 ) OR
(ll.level >=3 AND l.id = 5 ) OR
(ll.level >=2 AND l.id = 6 ))
GROUP By c.id
我需要能够按总计字段对结果进行排序,并且我还需要能够在模板中显示该总计。不知何故,我需要创建一个结合这 3 个实体 + 分组依据的更大对象的列表。
知道什么是最好的方法吗?我尝试获取候选人的 id 并仅执行 Candidates.objects.find(id__in = ids) 但以后无法对其进行排序。
提前致谢
【问题讨论】:
-
不要尝试翻译原始 SQL。根据您拥有的对象描述您需要的结果。
-
A 基本上需要列出所有会说英语和西班牙语的候选人(例如),他们的水平等于或大于中级。然后将它们按具有更好水平给予百分比的那些进行排序......例如,如果你说两个都在要求的水平上 100%,如果你说一个 50%。所以这很容易用 SQL 来做......但我发现它在不使用原始查询的情况下与 Django 有点混淆。
标签: sql django django-models django-templates