Django嵌套内联表单集

Cés*_*pia 17 django django-forms

我正在尝试解决问题,但我不知道如何面对它.我需要一些帮助 :-)

我有这样的模型层次结构:

class Task(models.Model):
    name = models.CharField(max_length=255)
    number_of_steps = models.IntegerField()

class StepGroup(models.Model):
    task = models.ForeignKey(Task)
    init_date = models.DateField()

class Step(models.Model):
    group = models.ForeignKey(StepGroup)
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

我必须编写一个对话框,在其中创建一些步骤组.InlineFormSet看起来可行,但由于嵌套有两个层次,我不知道如何做到这一点.

此外,我需要通常的表单形式:错误控制(form.name_of_field.errors),编辑任务时的自动填充等,所以使用javascript手动执行它,服务器端处理POST请求将太复杂和错误 - 易于.

这是我需要表单的方式(每个组中的步骤数由Task模型中的"number_of_steps"字段设置):

+-----------------------------------+
| STEP GROUP 1                      |
|                                   |
| Init date: _____________          |
|                                   |
| Step 1: ________________          |
| Step 2: ________________          |
| Step 3: ________________          |
|                                   |
+-----------------------------------+
| STEP GROUP 2                      |
|                                   |
| Init date: _____________          |
|                                   |
| Step 1: ________________          |
| Step 2: ________________          |
| Step 3: ________________          |
|                                   |
+-----------------------------------+
|                                   |
|             +-------------------+ |
|             | Create step group | |
|             +-------------------+ |
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)

请,任何形式的帮助,建议或链接将非常感谢.

小智 1

有可能的。我在 Pycon Ru 2021 上展示了它,并开始撰写有关它的文章:

https://dev.to/danilovmy/django-nested-inline-redering-4pfg

不久:

您可以创建表单集,一个字段就是这个表单集 - 它是其他表单集。这里有点难,如何为每个字段实现正确的 id。您还需要覆盖字段的“is_changed”。以及保存方法。

嵌套中最大的问题是多用户工作。如果一个用户更改了某些内容,那么现在就会更改其他用户 - 您可能会在数据库一致性中遇到复杂的错误