Django选择查询以从所有子表中获取数据

时间:2015-09-07 13:15:09

标签: django postgresql python-2.7 django-queryset

我有Django模型说,

class JobApplication(models.Model):
    job_application_id = models.AutoField(primary_key=True)
    user_id = models.ForeignKey(User)
    resume_id = models.ForeignKey(Resume)

class Resume(models.Model):
    resume_id = models.AutoField(primary_key=True)
    resume_name = models.CharField()
    .... other fields

class Education(models.Model):
    education_id = models.AutoField(primary_key=True)
    resume_id = models.ForeignKey(Resume)
    degree_name = models.CharField()
    .... other fields

class Experience(models.Model):
    experience_id = models.AutoField(primary_key=True)
    resume_id = models.ForeignKey(Resume)
    company_name = models.CharField()
    .... other fields

class Skills(models.Model):
    skill_id = models.AutoField(primary_key=True)
    resume_id = models.ForeignKey(Resume)
    skill_name = models.CharField()
    .... other fields

我想要一个针对jobapplication模型中给定job_id的查询集,它应该参考对作业id的resume id来获取其所有相关的教育,经验,技能等。 对于Now,我在单个quires中执行此操作,例如我从job_application获取resume_id然后使用引用获取恢复详细信息

resume_against_job =Jobapplication.objects.get_query_set().get_complete_Jobapplication(job_id)
for resum in resume_against_job:
        resume_dict = {}
        resume_id = resum['resume_id']
        user_id = resum['user_id']

然后针对这些user_idresume_id,我写了另一个查询来获取用户详细信息及其简历详细信息。

1 个答案:

答案 0 :(得分:0)

要回答你的问题,你只能对每个模型进行单独的查询,如果你有resume_id(我在你拥有的每个模型上看到它),也许你可以将它们包装在一个函数中,但它没有'得到任何比这简单。

我认为你的根本问题在于数据库设计。如果每个模型中都有resume_id,为什么不将它们全部合并到Resume模型中?听起来他们都属于该模型,如果每个EducationExperienceSkill都是Resume特定的。如果简历共享公共EducationExperienceSkill,则只创建单独的模型,但它们应该是Resume模型上的外键。同样在这种情况下,您只需查询Resume模型并获取所有其他信息,而不是在多个地方搜索。