2

这是在 Django 1.5 上。

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

  • 申请人
  • 技能

这 2 个模型通过一个直通模型 ApplySkillScore 相关联。所以它看起来像:

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. 如果存在申请人的技能分数,请显示一个预先填写的表格。否则,显示一个空表单。

Django中是否有一种优雅的方式来呈现这样的表单?

4

1 回答 1

0

我认为要走的路是使用内联表单集。

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

  1. 申请人和技能是从各自的模型中动态得出的。(如果技能是硬编码的字段,这将容易 10000 倍。)

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

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

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

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

于 2015-06-27T04:10:14.947 回答