gpt4 book ai didi

mysql - Django——自定义过滤器或 SQL raw

转载 作者:行者123 更新时间:2023-11-29 00:13:00 25 4
gpt4 key购买 nike

我有一个带有模型的应用程序,该模型具有实现 toxi 标记模型的三个表。一张工作表,一张技能表和一张映射它们的表,以 jobid -- skillid 的形式。

由于映射的数量,如果我使用以下内容:

{% for job in jobs %}
<p>{{ job.job_title }}</p>
{% for skill in skillmaps %}
{% if job.id == skill.job_id.id %}
#{{ skill.skill_id|title }}
{% endif %}
{% endfor %}
{% endwith %}

它只是简单地使用了所有处理器并花费了很长时间,大约 30 分钟。

如果我在数据库中查询 jobid = "nnn"的映射表中的所有 skillid,查询速度非常快。

我想知道最好的方法是什么,因为我想要这样的东西:

{% for job in jobs %}
<p>{{ job.job_title }}</p>
{{ print all skills for job.job_id}}
{% endwith %}

我试过使用自定义过滤器,但我无法让上面的代码工作,因为我似乎必须从 for skillmaps foor lop 中过滤一个值,这只是同一个问题。是否可以使用原始查询定义一个类并从模板中的 for 循环传递一个变量?或者最好的方法是什么?

模型:

class Job(models.Model):
job_title = models.CharField(max_length=200)
job_identifier = models.CharField(max_length=140)
job_site = models.URLField(max_length=200)
job_url = models.URLField(max_length=400)
job_salary = models.PositiveIntegerField(default=0, blank=True, null=True)
def __unicode__(self):
return self.job_title[:200]

class Skill(models.Model):
skill_name = models.CharField(max_length=200)
def __unicode__(self):
return self.skill_name[:200]

class SkillMap(models.Model):
job_id = models.ForeignKey(Job)
skill_id = models.ForeignKey(Skill)
def get_skills_mod(self, *args):
return SkillMap.objects.filter(job_id = args)

谢谢,艾萨克

最佳答案

这不是一个非常干净的解决方案,但您可以在您的 View 中一次获取所有 SkillMap,创建一个以 job_id 作为键的字典,然后将它们注入(inject) 工作 :p

from collections import defaultdict

def my_view(request):
skills = SkillMap.objects.all()
skills_dict = defaultdict(list)
for x in skills:
skills_dict[x.job_id].append(x)

jobs = Job.objects.all()
for job in jobs:
job.injected_skills = skills_dict.get(job.id, [])

template_context = {
'jobs': jobs,
}

模板:

{% for job in jobs %}
<p>{{ job.job_title }}</p>
{% for skill in job.injected_skills %}
{{ skill }}
{% endfor %}
{% endwith %}

关于mysql - Django——自定义过滤器或 SQL raw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com