Django表格Formset

时间:2013-11-04 09:04:08

标签: python django django-models django-forms

这是在Django 1.5上。

我有一个看似简单的问题,但在实践中结果非常复杂。所以我在工作申请网站上工作,我有两个模型:

  • 申请人
  • 技能

这两个模型通过直通模型ApplicantSkillScore相关联。所以它看起来像:

class Applicant(models.Model):
    name = models.CharField(max_length=255)
    skills = models.ManyToManyField(Skills, through='ApplicantSkillScore')

class Skill(models.Model):
    name = models.CharField(max_length=255)

class ApplicantSkillScore(models.Model):
    applicant = models.ForeignKey(Applicant)
    skill = models.ForeignKey(Skill)
    score = models.FloatField(_("Score"))

现在我要做的是渲染一个基于表格的表格来输入申请人的技能分数,如下所示:

 -----------------------------------------------
|           |            |        |             |
| Applicant | Javascript | Python | Objective-C |
|-----------+------------+--------+-------------|
| John      |  5.0       | <Form> |    <Form>   |
| Jane      |  <Form>    | 6.7    |    <Form>   |
 -----------------------------------------------

这个想法是:

  1. 申请人和技能是从各自的模型动态推导出来的。 (如果技能是硬编码字段,那么这将容易10000倍。)
  2. 如果申请人的技能分数存在,则显示预先填好的表格。否则,显示一个空表格。
  3. 在Django中有一种优雅的方式来渲染这样的表格吗?

1 个答案:

答案 0 :(得分:0)

我认为可行的方法是使用内联表单集。

然后,您可以将所有申请人及其相关技能分数渲染为表单集。

  
      
  1. 申请人和技能是从各自的模型动态推导出来的。 (如果技能是硬编码字段,那就可以了   容易10000倍。)
  2.   

基本上,您只想创建父模型对象及其关联子项(ApplicantSkillScore)。这就是inline formsets的解决方案,因为它们允许您创建/修改您的申请人模型以及使用外键链接到其上的其他模型。

  
      
  1. 如果申请人的技能分数存在,则显示预先填好的表格。否则,显示一个空表格。
  2.   

这只是在模板中呈现表单的问题。使用内联表单集,它将像普通表单一样运行,并显示数据(如果有)或只是空表单。由您决定如何呈现它。

我已使用此示例开始使用:inline formset with class based view example